sunny: 2dimensionales Array auslesen

Hallo zusammen,

fange gerade an mit PHP zu arbeiten (zuvor nur ASP) und stehe jetzt vor einem kleinen Problem das eigentlich ganz simpel zu lösen sein müsste, aber ich komm einfach nicht drauf, steh wohl gerade ziemlich auf der Leitung ...

Hab hier ein kleines Array mit 2 Dimensionen in welchem ich alles auslesen möchte, also erste und zweite Dimension. Der Einfachheit halber mal einfach so wie's ist ausgegeben:

$aMenuItems = array(
  array("MenuTitle" => "a", "SubMenu" => $aSubMenuItems = array("a1","a2","a3")),
  array("MenuTitle" => "b", "SubMenu" => $aSubMenuItems = array("b1","b2","b3")),
  array("MenuTitle" => "c", "SubMenu" => $aSubMenuItems = array("c1","c2","c3"))
);

foreach($aMenuItems as $MenuItemValue) {
     echo("<strong>MenuTitle: ".$MenuItemValue["MenuTitle"]."</strong><br/>");
  foreach($aSubMenuItems as $SubMenuItemValue) {
   echo($SubMenuItemValue."<br/>");
  }
  echo("<br/>");
}

Allerdings hab ich jetzt in der zweiten Ebene von Anfang an die Einträge des letzten Eintrages aus der ersten Ebene - sprich es werden alle "Sub-Einträge" von "c" ausgegeben. Das ist natürlich falsch. Ich denke da hab ich irgendwie einen Fehler sodass die Variablen schon geschrieben wurden und meine Ausgabe zu spät oder falsch erfolgt!? Ich teste an dem Beispiel jetzt schon ewig rum und kann das array-Kapitel aus php.net schon auswändig, komm aber irgendwie nicht ganz drauf, wahrscheinlich ein total blöder Fehler ...

Hoffe meine Frage wird trotzdem es schon hunderte Beiträge zu diesem Thema im Archiv gibt und es wohl eigentlich ganz einfach sein sollte das von mir gewünschte Ergebnis zu erreichen, beantwortet. Ich glaub ich hab grad ein Brett vorm Kopf, es will nicht funktionieren ...

Liebe Grüße
sunny

  1. Hi nochmal!

    foreach($aMenuItems as $MenuItemValue) {
         echo("<strong>MenuTitle: ".$MenuItemValue["MenuTitle"]."</strong><br/>");
      foreach($aSubMenuItems as $SubMenuItemValue) {
       echo($SubMenuItemValue."<br/>");
      }
      echo("<br/>");
    }

    Ich hab die Lösung, war ja eigentlich eh ganz einfach, wie ich schon dachte:

    foreach($aMenuItems as $MenuItemKey => $MenuItemValue) {
            echo("<strong>MenuTitle: ".$MenuItemValue["MenuTitle"]."</strong><br/>");
            foreach($MenuItemValue["SubMenu"] as $SubMenuItemKey => $SubMenuItemValue) {
                echo($SubMenuItemValue."<br/>");
            }
            echo("<br/>");
        }

    So muss es natürlich heißen, in der zweiten Schleife lag der Fehler! Und der Übersichtlichkeit halber ist das Array jetzt folgendermaßen deklariert:

    $aSubMenuItems1 = array("a1","a2","a3");
    $aSubMenuItems2 = array("b1","b2","b3");
    $aSubMenuItems3 = array("c1","c2","c3");

    $aMenuItems = array(
            array("MenuTitle" => "a", "SubMenu" => $aSubMenuItems1),
            array("MenuTitle" => "b", "SubMenu" => $aSubMenuItems2),
            array("MenuTitle" => "c", "SubMenu" => $aSubMenuItems3)
        );

    So sollts besser sein! :-)

    Sonnige Grüße!
    sunny

  2. Hallo,

    probier's mal so:

    $aMenuItems = array(
      array("MenuTitle" => "a", "SubMenu" => array("a1","a2","a3")),
      array("MenuTitle" => "b", "SubMenu" => array("b1","b2","b3")),
      array("MenuTitle" => "c", "SubMenu" => array("c1","c2","c3"))
    );

    foreach($aMenuItems as $MenuItemValue) {
         echo("<strong>MenuTitle: ".$MenuItemValue["MenuTitle"]."</strong><br/>");
      foreach($MenuItemValue["SubMenu"] as $SubMenuItemValue) {
       echo($SubMenuItemValue."<br/>");
      }
      echo("<br/>");
    }

    was ich gemacht habe:
    die Variablenangabe aus dem Array genommen (hab sowas noch nie in php code gesehen, wahrscheinlich geht das in asp, aber wüsste nicht dass das in php geht) und beim 2. foreach das submenu der ersten schleife aufgerufen