[PHP] array nach ebene formatiert ausgeben

Matthiasnet

Well-known member
ID: 116869
L
14 August 2006
271
7
Hallo zusammen,

bin heute schon den ganzen Tag an dem Problem dran ein Array formatiert auszugeben...hab schon ales mögliche versucht aber nichts klappt richtig.
Ich möchte gerne aus folgendem Array:
PHP:
$menu = array('manu1' =>
                array('kat1',
                      'kat2'=>
                              array('<a href="#">unterkat1</a>')
                ),
              'menü2') =>
                array('kat1',
                      'kat2'=>
                              array('<a href="#">unterkat1</a>')
               )
);
folgende Ausgabe erreichen:

<ul>

<li class="menu_1 menu_top">manu1</li>
| <li class="menu_2">kat1</li>
| <li class="menu_2">kat2</li>
|| <li><a href="#">unterkat1</a></li>

<li class="menu_1 menu_top">manu1</li>
| <li class="menu_2">kat1</li>
| <li class="menu_2">kat2</li>
|| <li><a href="#">unterkat1</a></li>

</ul>

Hat da villeicht jemand eine Idde wie man das ganze sinnvoll machen kann?

Grüße

Matthias
 
Hallo

Eigentlich würde ich sagen, man braucht dazu 2 for (oder foreach) Schleifen. Allerdings wird bei genauerem Hinsehen dein Array merkwürdig (so will ich es mal nennen). Du nutzt in der ersten Ebene (Dimension) sogenannte Assoziative Arrays (also Schlüssel=>Wert). In der Ebene darunter mischst du aber assoziative Arrays (bei kat2) mit ganz normalen Arrayelementen (kat1). Das macht die Sache komplizierter. Hier solltest du das ganze einheitlich machen!

Was ich auch nicht verstehe: warum du den Link nochmal extra in ein Array packst? Das ist doch nur ein ganz normaler String.

Wenn du die array-Struktur ändern kannst, dann solltest du das machen. Mein Vorschlag:
PHP:
$menu=array(
  "menu1" => array("kat1" => "", "kat2" => "<a ...</a>"),
  "menü2" => array("kat1" => "", "kat2" => "<a ...</a>"),
);

Damit hast du einheitlich Schlüssel-Werte-Paare. Durch diese solltest du jetzt eigentlich durchlaufen können.
PHP:
foreach ($menu as $key => $value)
{
   echo($key); // liefert menu1, menu2, ...
   foreach ($value as $key2 => $value2)
   {
        echo($key2); // liefert kat1, kat2, ...
        echo($value2); // liefert "", "<a ...</a>" und so weiter
   }
}

Ich hoffe ich bin da jetzt nicht durcheinander gekommen. Die Ausgabe in der Liste musst du dir dann selber zusammenbasteln. So wie du sie jetzt hast, kommt in der Ausgabe nämlich keine Unterscheidung der Ebenen.
 
Danke für die schnellen Antworten und danke @Sebbo für deinen Hinweiß und deine ausführliche Beschreibung + Beispiel.

Hatte es schon einige mal mit foreach benutzt, wusste da aber noch nicht das ich damit nur eine Ebene des Arrays abarbeiten kann und somit mehrere foreach-Schleifen nutzen kann...ist auf jeden Fall eine sehr nützliche Sache;)

Zum Array, war an einigen Passagen bereits so vorgegeben, da das Array in dieser vorm so vom CodeIgniter (Framework) abgearbeitet worden ist und hatte Gedacht das es so die sinnvollste Methode wär...habs aber nun umgeändert.


Habt mir echt den Tag gerettet, sonst wär ich was weiß ich wie lang noch an der Sache dran:biggrin: