dedlfix: Array mit Nested Set Werten zu Html-Liste/Menu verarbeiten

Beitrag lesen

Tach!

Du hast eine Menge Zugriffe auf das aktuelle Element. Es empfiehlt sich, $this->arrMenuItems[$i] in einer lokalen Variable ($current) abzulegen und die zu verwenden.

Ist das in dem Fall nicht egal? Und wenn nicht wo liegt der Unterschied beim Zugriff auf ein "lokales" 2 dimensionales Array und dem auf ein 3 dimensionales Klassenweites?

Vorteile sind die Einsparung beim Tippen, der sprechendere Name und ganz geringfügig Performance, weil weniger [$i] aufgelöst werden muss.

// letzten Elter suchen
    $arrParent = array_pop($this->arrStack);

Damit nimmst du den Elter auch vom Stack, was aber nur beim Aufsteigen passieren soll. Nimm an dieser Stelle end() und spar dir das Wiederdrauflegen. Beachte auch, dass array_pop() null und end() false liefert, wenn das Array leer ist.
Aber ich lege ihn ja auch immer wieder drauf. Und beim Vergleich als "Blatt" brauch ich ja auch das Elter.

Ja, und da reicht es, wenn du eine Kopie nimmst und nicht ständig das Array bearbeitest.

Ich bin mir grad nicht sicher was du mit "beim Aufsteigen" meinst. Meinst du meine while-Schleife?

Ja, die while-Schleife, oder allgemein gesagt, wenn du in die Ebene des Vorfahren zurückkehrst.

Es geht nicht darum, die Variable aufzuräumen, sondern dass wenn da nochwas drinliegt, du noch abgestiegen bist. Für jedes Element, das da noch liegt, muss noch eine ul/li-Liste geschlossen werden.
Die Geschichte mit dem abbauen des Stacks muss ich mir nochmal durch den Kopf gehen lassen. Ich dachte, das würde ich in der while-Schleife schaffen. Um die Liste würde ich mir auch erst Gedanken machen wenn ich die Level zuverlässig ermitteln kann.

Wie gesagt, die Level-Nummer brauchst du nicht, um die ul/li-Struktur aufzubauen. Die dient dir jetzt nur, um das richtige Entlanghangeln durch das Array zu prüfen. Du kannst ja jetzt schon mithilfe des Stacks ab- und aufsteigen, was übersetzt in das eigentliche Ziel heißt: ein neues ul erzeugen und es am Ende ordentlich schließen. Und um zum Schluss alle geschlossen zu haben, musst du den Stack abgebaut haben.

dedlfix.