Moin,
OK, werden wir mal konkreter.
Ja. Interessantes Thema!
ich habe eine Datenbanktabelle für ein Menu und bekomme folgendes Array raus: [..]
Wie sollte der Aufbau des Zielarrays sein? Und wie komm ich da hin?
Bei mir existiert ein Baum nur in der Darstellung. D.h., eine Zwischenstufe in Form einer baumartigen Datenstruktur gibt es nicht. Ich habe Objekte mit OIDs wobei in der OID (Objekt-ID) der Zweig steckt:
/
/map/
/map/apps/
/map/apps/ipcalc
usw. Die OID ist gleich dem URL der requested werden darf. Die Datenstruktur ist flach und sieht so aus (Perl):
$objects{OID}{ATTR}; # OID == URL, ATTR => Title, Descr, Body etc.
Bei einem Request wird aus dem REQUEST_URI das Objekt erstellt (oder auch nicht, gibt dann Status: 404).
Der Speicherort für meine Objekte ist wahlweise eine Datei oder MySQL mit einem selbst aufgesetzten Minimal-ORM. Dafür gibt es zwei Tie-Klassen, die das ganze redundant machen:
my %pbin = ();
tie(%pbin, 'ORM', %opts) || tie(%pbin, 'Objects', $cfg->{path}->{contbin}, 'lock');
# ORM: Klasse zum Binden der Objekte an eine DB-Tabelle
# Objects: Klasse zum Binden der Objekte an eine Datei
Ist die DB mal weg, geht nur die Suchfunktion nicht, ansonsten ist alles da was zur Seite gehört.
Soll ein Baum erzeugt werden, tut dies eine Rekursion über die OIDs bzw. URLs in der Liste der Objekte. Speicheroptimierung: Die Liste enthält nur die OIDs und die Namen der Attribute. Das Attribut selbst, z.B. der Body wird nur in den RAM geladen, wenn der URL selbst angefordert wird. Zur Ausgabe einer <ul> werden nur die Title-Attribute geladen und ggf. die Beschreibung (descr für den Meta-Tag).
Hotti