Mehrdimensionales Array in Tabelle
ascie
- php
Hallo,
so, probiert + gesucht habe ich wahrlcih lange, ohne wirklich schlau zu werden. Deshalb bitte ich um Mithilfe. -
Ein mehrdimensionales Array soll vernüftig in einer Tabelle dargestellt werden - daran breche cih mir die Ohren. Zur Erläuterung folgenden Sourcecode :
<?php
header('Content-Type: text/html; charset=UTF-8'); // UTF-8 Typesetting f. dt. Umlaute
// mehrdimensionales Array erzeugen
$a_adr = array ( array ( "0 - Peterpaul ", " Perlich ", " Perlengasee 0 ", " 04710 ", " Perlmutt ", " 012345-6789 ", " 98765-43210-0" ),
array ( "1 - JensPeter ", "Perlich ", " Perlengasse 1 ", " 04711 ", " Perlenort ", " Tel. ", " Funktel. " ),
array ( "2 - JensPaul ", "Perlich ", " Perlengasse 2 ", " 04712 ", " Perlenort ", " Tel. ", " Funktel. " ),
array ( "3 - JensPaula ", "Perlich ", " Perlengasse 3 ", " 04713 ", " Perlenort ", " Tel. ", " Funktel. " ),
array ( "4 - JensPaulus ", "Perlich ", " Perlengasse 4 ", " 04714 ", " Perlenort ", " Tel. ", " Funktel. " ),
array ( "5 - JensPetra ", "Perlich ", " Perlengasse 5 ", " 04715 ", " Perlenort ", " Tel. ", " Funktel. " ));
echo "Hello World <br>"; // Testlauf
echo count($a_adr) . " Felder"; // Anzahl Reihen im Array ?
echo "<br>"; // Leerzeile
echo '<table border="8">'; // Tabellenrand
echo '<colgroup>' ; // Tab. Spalten, Breite definieren
echo '<col width="20%">';
echo '<col width="20%">';
echo '<col width="20%">';
echo '<col width="5%">';
echo '<col width="20%">';
echo '</colgroup>' ;
echo '<theader>' ; // Tabellenkopf
echo '<th align="left"><b>Vorname</th>'; // Einträge Tabellenkopf definieren
echo '<th align="left"><b>N a m e </th>';
echo '<th align="left"><b>Straße</th>';
echo '<th align="left"><b>PLZ </th>';
echo '<th align="left"><b>O r t </th>';
echo '<th align="left"><b>Telefon</th>';
echo '<th align="left"><b>mob. Tel.</th>';
echo '</theader>';
$i=0 ; // Hilfsvariabel zur Laufzeit
while ( $i < count($a_adr)) // while / wend
{
echo "<tr>"; // Arrayzeile in Tabellenfrom ausgeben
echo "<td> (a) $a_adr[$i]</td>" ;
echo "<td> (b) $i $a_adr[0][$i]</td>" ;
echo "<td>($a_adr[$i][2])</td>" ;
echo "<td>$a_adr[$i][3]</td>" ;
echo "<td>$a_adr[$i][4]</td>";
echo "<td>$a_adr[$i][5]</td>";
echo "<td>$a_adr[$i][6]</td>";
echo "</tr>" ;
$i++ ; // i plus eins, sonst wird´s ja endlos
}
echo "</table>" ; // Tabelle ausgeben !
$i=0 ; // Hilfsvariabel, wie gahabt
while ( $i<count($a_adr)) // und wieder das ganze, diesmal aber
{ // direkt und nur in einer Spalte
echo "<table>"; // und siehe, oh Wunder : Es wirkt.
echo "<td>"; // also ist das Array richtig formuliert
echo $a_adr[$i][0]; // aber die Tabelle wohl nicht ???
echo $a_adr[$i][1];
echo $a_adr[$i][2];
echo $a_adr[$i][3];
echo $a_adr[$i][4];
echo $a_adr[$i][5];
echo $a_adr[$i][6];
echo "<br><br>";
echo "</td>";
echo "</table>";
$i++ ; // sehr, sehr seltsam !
}
?>
Als Ausgabe erhalte ich folgendes : ( s. Bild )
Also ist das Array richtig formuliert ( 2. Teil der Ausgabe ), wird nur eben in der Tabelle nicht richtig angesprochen. Warum nicht ?
Wer weiß Rat + hilft mir ( Anfänger in php/HTML ... Programmierung ).
Bedankt, ascie
Grüße,
muss das so sein?
echo "<table>";
for(x in array){
echo "<tr>";
for(y in array[x]){
echo "<td>"+array[x][y]+"</td>"
}
echo "</tr>";
}
echo "</table>
oder habe ich deine Absicht falsch verstanden?
MFG
bleicher
Hi,
muss das so sein?
echo "<td>"+array[x][y]+"</td>"
Nein, diese Additionen sind vermutlich alles andere als sinnvoll.
MfG ChrisB
Hi,
muss das so sein?
echo "<td>"+array[x][y]+"</td>"
Nein, diese Additionen sind vermutlich alles andere als sinnvoll.
MfG ChrisB
Mhm. Verstehe ich ( noch ) alles nicht wirklich, aber besser mal morgen ausgeruht weiter lesen + basteln.-
Bleicher, meine Absicht ist es, die 7 Spalten des Beispiels korrekt geordnet untereinander aufzureihen. Übersichtlich in einer Tabelle. Wie im unteren Teil der Ausgabe eben dargestellt. Dort steht es aber eben nicht in einer Tabelle.
Evtl. muß ich ja von dem Gedanken eines mehrdimensionalen Arrays Abschied nehmen.
Jedenfalls erstmal danke-schön für schnelle Antworten.
Grüße,
Evtl. muß ich ja von dem Gedanken eines mehrdimensionalen Arrays Abschied nehmen.
nein - aber setze dich mehr damit auseinander, du machst es leider chinesisch
MFG
bleicher
Grüße,
Nein, diese Additionen sind vermutlich alles andere als sinnvoll.
jep . sollte es sein - war zu viel JS^^
MFG
bleicher
Hi,
while ( $i < count($a_adr)) // while / wend
{
echo "<tr>"; // Arrayzeile in Tabellenfrom ausgeben
echo "<td> (a) $a_adr[$i]</td>" ;
echo "<td> (b) $i $a_adr[0][$i]</td>" ;
echo "<td>($a_adr[$i][2])</td>" ;
echo "<td>$a_adr[$i][3]</td>" ;
Diese Art, Arrayvariablen direkt innerhalb eines Strings zu notieren, funktioniert teilweise so nicht - warum, kannst du hier nachlesen:
<http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing>
<http://www.php.net/manual/en/language.types.array.php>
Am vernünftigsten wäre es, die gewünschte Ausgabe aus Teilstrings und Variableninhalten zusammen zu setzen, mit Hilfe des Verkettungsoperators Punkt. Auch dazu steht auf den verlinkten Seiten was.
MfG ChrisB
--
The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That's funny...” [Isaac Asimov]
Hi!
Am vernünftigsten wäre es, die gewünschte Ausgabe aus Teilstrings und Variableninhalten zusammen zu setzen, mit Hilfe des Verkettungsoperators Punkt.
Für Ausgaben mehrerer Werte mit echo muss man nicht erst die Teilstrings miteinander verknüpfen. Man kann sie auch als einzelne, durch Komma getrennte Parameter notieren. Und wenn man solche Textbrocken ausgeben will, kommt man mit der Heredoc-Syntax (inklusive der geschweiften Klammern bei den Arraywerten) günstiger weg als mit zeilenweisen echo-Ausgaben. Zudem hat man dann auch in der Ausgabe eine formatierte selbige und keine einzeilige Code-Wüste (wenn man echos ohne zusätzliche "\n" verwendet). Dem Browser wäre das egal, aber bei einem eventuellen Debugging hilft es.
Lo!
Guten Morgen,
$i=0 ; // Hilfsvariabel zur Laufzeit
$z=count($a_adr) ; // Anzahl Array Elemente ermitteln
while ( $i < $z) // while / wend solange es noch wat gibt
{
echo "<tr>"; // Arrayzeile in Tabellenfrom ausgeben
echo "<td>".$a_adr[$i][0]."</td>" ;
echo "<td>".$a_adr[$i][1]."</td>" ;
echo "<td>".$a_adr[$i][2]."</td>" ;
echo "<td>".$a_adr[$i][3]."</td>" ;
echo "<td>".$a_adr[$i][4]."</td>";
echo "<td>".$a_adr[$i][5]."</td>";
echo "<td>".$a_adr[$i][6]."</td>";
echo "</tr>" ;
$i++ ; // i plus eins, sonst wird´s ja endlos
}
So ist nu umgebaut + läuft bestens. Der Fehler lag tatsächlich nur in der Stringzusammensetzung.
Um nicht bei jeder while/wend Schleife erneut zählen zu müssen, gibt´s neu die Hilfsvariable $z, mit der einmalig die Anzahl Arrayelemente bestimmt wird.
Was spricht gegen diesen Code ? ( Für mich jedenfalls ist er logisch, nachvollzieh- und bestens lesbar .... ) Gibt´s evtl. Programmrestriktionen, die dagegen sprechen könnten ( welche ? )?
Gruß, ascie
Moin!
So ist nu umgebaut + läuft bestens. Der Fehler lag tatsächlich nur in der Stringzusammensetzung.
Um nicht bei jeder while/wend Schleife erneut zählen zu müssen, gibt´s neu die Hilfsvariable $z, mit der einmalig die Anzahl Arrayelemente bestimmt wird.Was spricht gegen diesen Code ?
Dass du while benutzt, um das gesamte Array durchzugehen. Für sowas wurde foreach erfunden, das ist noch eindeutiger, und vermutlich auch etwas schneller.
- Sven Rautenberg
Hi!
Was spricht gegen diesen Code ? ( Für mich jedenfalls ist er logisch, nachvollzieh- und bestens lesbar .... )
Die Ausgabe ergibt eine unübersichtlich lange Zeile. Du wiederholst dich statt eine Schleife zu verwenden. Und wenn du sowieso über alle Array-Elemente gehen willst, ist foreach einfacher als while mit Selbstzählung. (wend ist auch kein PHP-Begriff.)
Lo!
Grüße,
das hier:
echo "<td>".$a_adr[$i][0]."</td>" ;
echo "<td>".$a_adr[$i][1]."</td>" ;
echo "<td>".$a_adr[$i][2]."</td>" ;
echo "<td>".$a_adr[$i][3]."</td>" ;
echo "<td>".$a_adr[$i][4]."</td>";
echo "<td>".$a_adr[$i][5]."</td>";
echo "<td>".$a_adr[$i][6]."</td>";
ist ein Verbrechen , chinesisch Bastelei, um den 5jahresplan der kommunistischen Regierung nach zeilen code zu erfüllen.
du hast identische Struktur mit laufvariable - ich empfinde fremdschämen für die "direkte" Art die du benutzt hast.
da kannst du gleich auf php verzichten und html hartschreiben.
programmiersprahcen, die türingechten, haben schleifen und bedingungen, extra für sowas.
MFG
bleicher