Jörg: Falsche Ausgabe aus Array

Hallo,

ich lese ein Array mit WHILE aus, doch bei der Ausgabe wird immer nur der erste Buchstabe ausgegeben. Mache ich vorher eine Ausgabe mit var_dump,  kann ich sehen das dass Array richtig zusammengebaut ist (function ist ebenfalls ein Array welches in der inneren Schleife gelesen wird).

array(1) { [1]=>  array(4) { ["username"]=>  string(6) "Tester" ["id_user"]=>  string(1) "1" ["path"]=>  NULL ["function"]=>  array(3) { [1]=>  string(5) "Admin" [2]=>  string(9) "Moderator" [3]=>  string(7) "Leitung" } } }

Script:
while(list($key, $value)=each($team)){
  echo $value['username'] . "</ br>";

while(list($key2, $value2)=each($value['function'])){
  echo $value2['function'] . "</ br>";
  }
  echo "</br><br />";
 }

Ausgabe:
Tester
AML

Es wird also immer nur der erste Buchstabe des Strings ausgegeben. Habt Ihr dafür eine Erklärung? Ich nicht.

Gruß
Jörg

  1. Hi!

    ich lese ein Array mit WHILE aus,

    Warum nicht mit foreach? Da brauchst du nur ein Konstrukt und nicht derer drei (while, list, each).

    Mache ich vorher eine Ausgabe mit var_dump,  kann ich sehen das dass Array richtig zusammengebaut ist (function ist ebenfalls ein Array welches in der inneren Schleife gelesen wird).

    array(1) { [1]=>  array(4) { ["username"]=>  string(6) "Tester" ["id_user"]=>  string(1) "1" ["path"]=>  NULL ["function"]=>  array(3) { [1]=>  string(5) "Admin" [2]=>  string(9) "Moderator" [3]=>  string(7) "Leitung" } } }

    Bitte noch vor der Ausgabe ein <pre> ausgeben oder die Ausgabe im Browser-Quelltext betrachten, so kann das doch kein Mensch ordentlich lesen.

    while(list($key2, $value2)=each($value['function'])){
    echo $value2['function'] . "</ br>";

    var_dump() kennst du nun schon. Wende das doch mal auf $value2 an.

    Es wird also immer nur der erste Buchstabe des Strings ausgegeben. Habt Ihr dafür eine Erklärung? Ich nicht.

    Ja, $value2 enthält einen String. Die []-Syntax greift bei Strings auf einzelne Zeichen zu. Das 'function' wird dazu in eine Zahl umgewandelt, weil man nur über einen nummerischen Wert auf eine Position innerhalb eines String zugreifen kann. (int)'function' ergibt also 0 und damit wird $value2['function'] zu $value2[0], was den ersten Buchstaben ergibt.

    Lo!

    1. Ja, $value2 enthält einen String. Die []-Syntax greift bei Strings auf einzelne Zeichen zu.

      ...

      Ok, habe ich verstanden, aber wie kann ich denn jetzt den Inhalt korrekt ausgeben?

      1. Hallo,

        Ja, $value2 enthält einen String. Die []-Syntax greift bei Strings auf einzelne Zeichen zu.
        Ok, habe ich verstanden, aber wie kann ich denn jetzt den Inhalt korrekt ausgeben?

        hast Du schon mal versucht, einfach nur $value2 auszugeben?

        Anmerkungen:
        Wie dedlfix lege ich Dir das foreach-Statement ans Herz.
        Verwende bitte aussagekräftigere Variablennamen als

        $key, $key2
          $value, $value2

        Schriebest Du die innere Schleife, die ein einfaches numerisch indiziertes Array ist zu

        foreach($value['function'] as $function) {  
            echo $function, "<br />\n";  
        }  
        
        

        um, kämst Du sehr wahrscheinlich gar nicht auf die Idee, einen Arrayzugriff auf Deine Werte vorzunehmen.

        Freundliche Grüße

        Vinzenz

        1. um, kämst Du sehr wahrscheinlich gar nicht auf die Idee, einen Arrayzugriff auf Deine Werte vorzunehmen.

          Besten Dank, ich gelobe Besserung!

          Gruß
          Jörg

  2. Kleine Korrektur der Korrektheit halber, die Zeilenumbrüche werden natürlich so geschrieben:
    <br />

    Gruß
    Jörg