ascie: Mehrdimensionales Array in Tabelle

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 )
Ausgabe ( Screenshot )

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

  1. 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

    --
    __________________________-

    FirefoxMyth
    1. Hi,

      muss das so sein?

      echo "<td>"+array[x][y]+"</td>"

      Nein, diese Additionen sind vermutlich alles andere als sinnvoll.

      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]
      1. 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.

        1. 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

          --
          __________________________-

          FirefoxMyth
      2. Grüße,

        Nein, diese Additionen sind vermutlich alles andere als sinnvoll.

        jep . sollte es sein - war zu viel JS^^
        MFG
        bleicher

        --
        __________________________-

        FirefoxMyth
  2. 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]
    
    1. 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!

      1. Hi!

        [...] Heredoc-Syntax [...]
        Link vergessen.

        Lo!

  3. 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

    1. 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

    2. 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!

    3. 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

      --
      __________________________-

      FirefoxMyth