PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   dynamische Strings einlesen und vertauscht in HTML-Tabelle ausgeben (http://www.selfphp.de/forum/showthread.php?t=10630)

c.brandau 29.05.2005 08:55:48

dynamische Strings einlesen und vertauscht in HTML-Tabelle ausgeben
 
:(
Hallo Forum,
ich hab hier ein Problem an dem ich schon tagelang sitze und nicht weiterkomme.
Ich hoffe mir ist noch zu helfen.

Problemschilderung:
Eine bestimmte Integeranzahl (Primarykeys) soll aus DB eingelesen werden.
Aufgelisten möchte ich diese in einer Tabelle die wie folgt aussieht:

integer 11 integer 8 integer 5
integer 12 integer 9 integer 6
integer 13 integer 10 integer 7 integer 4


Ich lese die PK's aus DB von hinten nach vorne ein
und nur 10 Stück sollen in einer Tabelle angezeigt werden.
Die darstellung nicht zeilenweise hintereinander sonder
wie oben in Dreierpacks nebeneinander.
Aber der letzte INT nicht an erster Stelle eines Dreierpacks in der HTML-TAB
sondern die Position mit dem letzten INT des Dreierpacks, in diesem Falle 11,
vertauscht.

Provisorisch habe ich die Tabellen darstellung mit
switch case hingekriegt, aber nicht befriedigend

<TABLE>
<TR>
<TD>
<TABLE>
<TR>
<TD>

<?php
$db=mysql_connect
mysql_select_db
$anfrage="SELECT * FROM tabelle";
$ergebnis=mysql_query($anfrage);
$anz=mysql_num_rows($ergebnis);
for ($a=$anz-1;$a>$anz-10;$a--)
mysql_data_seek($ergebnis, $a);
$zeile=mysql_fetch_row($ergebnis);

print("<a href='readfrm.php?_id=");
print($zeile[0]);
print("'>");
print($zeile[0]);
print(" - ");
print($zeile[5]);
print("</a>");

print("</TD>");


$b = 0+$a;
switch ($b) {


case "6":
print(" ");
print("</TR></TABLE>");
print("<TD><TABLE border=1><TR><TD>");



break;
case "3":
print(" ");
print("</TR></TABLE>");
print("<TD><TABLE border=1><TR><TD>");



break;

case "0":
print(" ");
print("</TR>");
print("</TABLE>");



break;

default:
print("");
print("</TR>");
print("<TR><TD>");

}

er soll ja OBJEKTIV 10 Stück nehmen die da sind und sich nicht nach $a richten.


Da er ja im For alles einliest und runterrattert dachte ich mir, dass man das
so sicherlich nicht ordnen kann. In Erwägung gezogen habe ich Arrays
...dass er mir die PK's Arrays zuweist, zwischenspeichert, diese dann sortiert
und richtig ausgibt nur

for ($a=$anz-1;$a>$anz-10;$a--)

$zwischen[$i] = $zeile[]

$i = $i + 1;

geht auch nicht.


Hat jemand Anstöße oder Hinweise wie dieses Problem zu bewältigen ist??
DANKE FÜR EUER HILFE!

xabbuh 29.05.2005 12:13:58

AW: dynamische Strings einlesen und vertauscht in HTML-Tabelle ausgeben
 
Am besten speicherst du die Daten zunächst in einem verschaltelten Array, wobei die Schlüssel, die jeweilige Zeilennummer angeben, in der der Eintrag stehen soll. Welche das ist, kannst du leicht mit dem Modulooperator bestimmen:
PHP-Code:

<?php
    $entries 
= array(
                    
=> array(
                            ),
                    
=> array(
                            ),
                    
=> array(
                            )
                );

    
$i 0;
    while(
$row mysql_fetch_assoc($result)) {
        
$line $i 1;
        
$entries[$line][] = $row['column'];
    }

    
//  für jede Zeile die Anzahl der Einträge ermitteln und in Array speichern
    
$num = array();
    
$max 0;
    foreach(
$entries as $line => $array) {
        
$num[$line] = count($array);

        
//  hat diese Zeile die meisten Einträge?
        
if(count($array) > $max)
            
$max count($array);    //  Anzahl der Einträge in $max speichern
    
}

    
//  für jede Zeile die Differenz der Anzahl zur maximalen Anzahl ermitteln
    
$diff = array();
    foreach(
$num as $line => $linenum) {
        
$diff[$line] = $max $num[$line];
    }

    
//  Einträge ausgeben
    
foreach($entries as $lineno => $line) {

        
//  Einträge absteigend sortieren
        
rsort($entries[$lineno];

        
//  eine neue Zeile aufmachen
        
print '<tr>';

        
//  alle Einträge dieser Zeile nacheinander ausgeben
        
foreach($line as $k => $entry) {
            print 
'<td>' $entry '</td>';
        }

        if(
$diff[$lineno] > 0) {
            
//  jetzt noch mit leeren Zellen auffüllen
            
print '<td colspan="' $diff[$lineno] . '">&nbsp;</td>';
        }

        
//  Zeile wieder schließen
        
print '</tr>';
    }
?>


c.brandau 29.05.2005 20:42:33

AW: dynamische Strings einlesen und vertauscht in HTML-Tabelle ausgeben
 
Whoa!

Hallo Xabbuh,

Erstmal danke, dass du dir Zeit genommen hast ein Script für mich zu schreiben! Es hat mich als Anfänger überfordert... :-Q
ich hab es dann in meinen Code implementiert und
werte verändert und prints hier und da dazugetan um zu testen
was sich tut.
foreach und mysql_fetch_assoc(iated) waren mir nicht ganz klar, hab nachgekuckt..
Es bleiben aber trotzdem noch viele Fragen offen.

Meine Grundüberlegungen sind:
Code:

1. die letzten 12 datensätze aus DB von hinten nach vorne einlesen und
einen gewissen String aus dem Satz extrahieren $line[2] z.B.
2. Diese mit schleife in Arrays zwischenspeichern
3. Die mit den Strings gefüllten Arrays nach unten dargestelltem Schema sortieren
4. in dreier Blöcke teilen (oder dieser Punkt höchstwahrscheinlich auch schon vor dem 3.)
5. die blöcke mit Schleife in HTML Tabelle setzen.

Verständlicherweise habe ich nach Parallelen zu den einzelnen Punkten
in deînem Script gesucht.

PHP-Code:

  $i 0;
    while(
$row mysql_fetch_assoc($result)) {
        
$line $i 1;
        
$entries[$line][] = $row['column'];
    } 

mit --> [] <--- zählt er automatisch hoch, oder?
nur wofür ist dann $line und $i gut?

PHP-Code:

$entries = array(
                    
=> array(
                            ),
                    
=> array(
                            ),
                    
=> array(
                            )
                ); 

Hier muss man doch vordefinieren, oder?
Meine daten sind aber dynamisch.

ich hab folgendes probiert:

PHP-Code:

<?php

$db
=mysql_connect("localhost","root","");
mysql_select_db("dbGoon");
$anfrage="SELECT * FROM forum";
$ergebnis=mysql_query($anfrage);
    
    while(
$row mysql_fetch_assoc($ergebnis)) {
        
    
$entries[] = $row['titel'];
    print(
$entries."<br />");
    
    }

?>

Korrekterweise listet er mir "10" mal Array auf aber nicht den Inhalt jener...
und hier fehlt mir dann auch das chronologische Auslesen der Datensätze von hinten nach vorn und die begrenzte Anzahl..
und was wenn ich nicht nur den Titel sondern auch das Datum mit auslesen will? Muss ich dann eine neue schleife machen mit row datum?
nur wie verbinde ich das dann mit den arrays die den titel enthalten?
PHP-Code:

$db=mysql_connect("localhost","root","");
mysql_select_db("dbGoon");
$anfrage="SELECT * FROM forum";
$ergebnis=mysql_query($anfrage);
$anz=mysql_num_rows($ergebnis);
for (
$a=$anz-1;$a>-13;$a--) {

    while(
$row mysql_fetch_assoc($ergebnis$a)) {
        
    
$entries[] = $row['art_id'];
    print(
$entries."<br />");
    }


so klappt es auch nicht, wegen dem $a in fetch assoc



Zitat:

wobei die Schlüssel, die jeweilige Zeilennummer angeben,
Wenn ich den Modulooperator verändere macht er mir aber eine kollektive Versetzung.
und noch sehe ich den Effekt des Modulooperators in der Rechnung nicht..

Auch dass da plötzlich ein $k aufgetaucht ist hat mich irritiert.
Ach herrje :-(

Grüße
Christoph






Code:

$dsatz[1]        INT 15            <------
$dsatz[2]        INT 14                  |  vertauschen
$dsatz[3]        INT 13            <------
 
$dsatz[4]        INT 12            <------
$dsatz[5]        INT 11                  |  vertauschen
$dsatz[6]        INT 10            <------
 
$dsatz[7]        INT  9            <------
$dsatz[8]        INT  8                  |  vertauschen
$dsatz[9]        INT  7            <------
 
$dsatz[10]      INT  6            <------
$dsatz[11]      INT  5                  |  vertauschen
$dsatz[12]      INT  4            <------

aber anstelle von Integer kann auch bzw. wird dann später ein String
verwendet. INT ist bloß zu Testzwecken.
Es soll ja die letzten 12 Überschriften(THEMEN in einem Forum anzeigen)
nur ein grafischer Umstand verlangt, dass in einem Dreierblock letzte
und erste Überschrift vertauscht werden müssen.

Diese Vertauschung oder Sortierung bei Arrays...gibt es da einen spez. Befehl?


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:51:23 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.