Vinzenz Mai: Schlangencode / Spaghetticode verhindern

Beitrag lesen

Hallo,

Mal ne grundsätzliche Frage. Mir passiert es immer wieder das ich zu komplexe Vorgänge zu tief verschachtelt programmiere. Ein Beispiel aus PHP

ich hab ein Array das folgendermaßen aussieht:

$menuarray=

array('Menuid'=>
    array('Menuname'=>
        array('level'=>
            array('menupunktid'=>
                array('name',
                      'url',
                      'published'
                     )
                 )
             )
         )
    )

  
das verstehe ich nicht - und das ist ernst gemeint. Es sieht nach einer Struktur für ein Menü aus.  
  
Wie wäre es mit Kommentaren, \*was\* Du mit dieser Struktur abbilden willst. Vermutlich möchtest Du eine bessere Struktur verwenden :-)  
  
Ein verschachteltes Menü lässt sich wunderbar als Baum darstellen. Bäume lassen sich sehr gut mit PHP-Arrays umsetzen. Wichtig ist es, dass Knoten identischen Aufbau haben.  
  

> Um dies auszulesen und auszugeben durchlaufe ich dies mittels verschachtelter foreachschleifen, denn ich will ja Menuname einzeln ausgeben. Ich will auf die Level einzeln zugreifen können und auf die MenupunktIDs sowie auf die Daten der Menupunkte.  
  
Das ist überhaupt keine gute Idee. Verfahren zum Durchlaufen von Bäumen gibts nicht so viele. Für Deinen Zweck wäre vermutlich pre-order-traversal günstig (entsprechende Datenstruktur vorausgesetzt), siehe z.B. [dieser Archivthread](/archiv/2011/3/t204031/#m1380942) mit rekursivem Durchlaufen mit einer weniger als 10 Zeilen langen Funktion, d.h. alles andere als Spaghetti-Code.  
  
Wie Du dort sehen kannst, ergibt sich das Level aus der Verschachtelungstiefe und sollte daher nicht redundant in der Datenstruktur mitgeführt (und mitgepflegt) werden.  
  
  
Freundliche Grüße  
  
Vinzenz