dedlfix: rekursive Logik

Beitrag lesen

Hi!

in meiner Datenbank speichere ich eine Baumstruktur
Um aus dieser Struktur eine verschachtelten Liste zu bauen habe ich mir eine Funktion gebaut.
[...]
Wie man sieht, ruft sich die Funktion rekursiv selbst immer wieder auf und befüllt so die Variable $tree mit einer verschachtelten Liste.

Soweit so schlecht. Einzelabfragen an das DBMS sollte man vermeiden. Frag lieber ddie Datensätze auf einmal ab und leg sie vorläufig in ein flaches Array. (Wenn du Teilbäume nach allen Regeln der Kunst abfragen willst, schau dir Nested Sets an. Brauchst du aber hier vermutlich nicht.) Selbst wenn du das Array mehrfach durchläufst um die Datensätze der verschiedenen Ebenen und Äste zu finden ist das effizienter als jedes Mal der DBMS-Query-Overhead.

Das funktioniert soweit, aber ich will versuchen, die Funktion umzuschreiben. Und zwar so, dass sie ein mehrdimensionales Array befüllt.

Mehrdimensional heißt für mich jeweils gleichmäßige Ausbreitung in mehr als eine Richtung. Du möchtest stattdessen eine Baumstruktur, bei der die Äste beliebig verzweigt sein können.

Irgendwie komme ich aber nicht auf die Idee, wie ich der Funktion mitteile, an welcher Stelle, also Dimension des Arrays die Elemente aus dem Resultset anhänge.

Besser wäre es, wenn du sammeln ließest. Das Wurzelelement delegiert das Zusammensuchen der Kinder an einen weiteren Funktionsaufruf. Der liefert die Kinder als Array zurück. Ein Kind verfährt ebenso mit den Kindeskindern.

Lo!