Peter L.: Array mit Nested Set Werten zu Html-Liste/Menu verarbeiten

Beitrag lesen

Hallo!

Ich habe ein Array der Form:

$arrNested =  
array(  
  0=>array(  
       'leftKey'      =>0,  
       'rightKey'     =>3,  
       'menuSection'  =>'foo',  
       'menuItem'     =>'bar'  
     ),  
  1=>array(  
       'leftKey'      =>1,  
       'rightKey'     =>2,  
       'menuSection'  =>'foobar',  
       'menuItem'     =>'bla'  
     ),  
  2=>array(  
       'leftKey'      =>4,  
       'rightKey'     =>5,  
       'menuSection'  =>'blub',  
       'menuItem'     =>'blob'  
     )  
);

Als Ausgabe hätte ich gern folgendes:

<h4>foo</h4>  
<ul>  
  <li>bar</li>  
  <li><h4>foobar</h4>  
      <ul>  
        <li>bla</li>  
      </ul>  
  </li>  
</ul>  
<h4>blub</h4>  
<ul>  
  <li>blob</li>  
</ul>

Das Array durchlaufe ich in einer foreach()-Schleife aber ehrlich gesagt, bin ich nicht weiter gekommen als bis zu dem Punkt mir alle Einträge in einer einfachen Liste ausgeben zu lassen :D
Ich habe so meine Schwierigkeiten dabei wieder auf "höhere Ebenen" zu springen. In dem Beispiel von "menuSection=>foobar" mit dem Eintrag "bla" auf "menusection=>blub" mit dem Eintrag "blob".
Ich weiß auch nicht so genau wie ich die neue "menuSection" erkenne. Bzw. wie ich das mit meinen anderen "Erkenntnissen" in Html "pressen" kann.

Meine Erkenntnisse soweit sind:
Wenn 'menuSection' ungleich dem letzten Wert ist, muss ich die Überschrift ausgeben und eine neue Liste öffnen.
Wenn 'rightKey' größer als der letzte 'rightKey' ist, muss ich n Ebenen "höher".
Wenn 'leftKey' größer als der letzte 'rightKey' ist, muss ich n Ebenen "höher".
Wenn 'leftKey' kleiner als der letzte 'rightKey' ist, muss ich 1 Ebene "tiefer".

Ist das falsch, fehlt da noch irgendwas oder kriege ich das damit hin? Mir fehlt der Ansatz woher ich weiß wieviel Ebenen ich jeweils nach "oben" springen muss wenn sich der nächste sich in einer übergeordneten oder neuen Liste befindet. Mir brummt mittlerweile ganz schön der Schädel.^^

Könnte mich bitte jemand in die richtige Richtung schubsen und mir einen Hinweis geben wie ich das am besten angehen kann?

Herlichen Dank schonmal!