Hallo!
Gegeben sei eine DB mit 2 Tabellen. In der 1. Tabelle befinden sich Kategorienamen, wobei jede Kategorie eine unique ID hat, in der 2. Tabelle befinden sich Unterkategorienamen, wobei jede Unterkategorie eine unique ID sowie als INT die ID jener Kategorie hat, zu der sie gehört:
Tabelle 'kategorien':
id | kategoriename
------------------
1 | Politik
2 | Musik
3 | Gesellschaft
4 | Kulinarik
5 | Geographie
6 | Automobiles
u.s.w. [...]
Tabelle 'unterkategorien':
id | kategorie | unterkategoriename
-----------------------------------
1 | 1 | Parteien
2 | 6 | Autohersteller
3 | 2 | Bands
4 | 6 | Autoforen
5 | 1 | Ministerien
6 | 4 | Kochrezepte
7 | 1 | Politikforen
u.s.w. [...]
Die Daten in den Tabellen ändern sich laufend, werden teilweise auch gelöscht, also steht keine lückenlose Durchnummerierung bei den IDs zur Verfügung! Nun soll eine Liste mit den momentan gespeicherten Kategorien sowie den momentanen Unterkategorien als jeweilige Unterliste ausgegeben werden:
* Politik
o Parteien
o Ministerien
o Politikforen
* Musik
o Bands
* Gesellschaft
* Kulinarik
o Kochrezepte
* Geographie
* Automobiles
o Autohersteller
o Autoforen
u.s.w. [...]
Ich habe das nun in 3 Schritten folgendermaßen gelöst:
Schritt 1: Zuerst werden in 2 DB-Abfragen die Daten der beiden Tabellen geholt und jeweils in einem Array gespeichert.
Schritt 2: In jedem Fall werden nun in einer foreach() Schleife 2 neue Arrays gebildet. Im Array "$array_kategorien" speichere ich die Namen der Kategorien, wobei die Indizes die jeweiligen Kategorie-IDs sind. Und im Array "$array_kategorien_IDs" speichere ich einfach systematisch jede vorhandene Kategorien-ID.
Schritt 3: Für jede Kategorie wird nun ein Array gebildet, dessen Variablenname dynamisch zusammengesetzt wird und die ID der Kategorie enthält. Es entsteht also die Arrays "array_unterkategorien_1", "array_unterkategorien_2", "array_unterkategorien_3", u.s.w., wobei in jedem dieser Arrays anschließend die jeweiligen Unterkategorienamen gespeichert werden.
Nun kann es mit folgender Systematik zur Ausgabe der Liste mit den Unterlisten kommen:
foreach($array_kategorien_IDs AS $id)
{
// Ausgabe der Kategorien:
echo "<li>".$array_kategorien[$id]."</li>";
// Ausgabe der Unterkategorien als Unterliste:
if(count(${'array_unterkategorien_'.$id})>0)
{
echo"<ul>";
foreach(${'array_unterkategorien_'.$id} AS $unterkategorie)
{
echo"<li>".$unterkategorie."</li>";
}
echo"</ul>";
}
}
Das funktioniert wunderbar und liefert genau das gewünschte Ergebnis. Meine Frage an Euch ist nun, ob das so gut gelöst ist oder ob es da einen einfacheren Weg mit kürzerem Quellcode gäbe bzw. wie Ihr das lösen würdet.
Mit lieben Grüßen
Melvin Cowznofski

What – me worry?