Hej NG!
Jeg er p.t. ved at skrue et skalerbart menu system sammen.
Det er bygget op over en mysql database og implementeres i praksis som en
linked liste implementation af et n'ary træ i PHP. Ved at foretage en
pre-order traversering af det får man netop den struktur som menuen skal
have. Så langt så godt...
På
www.m-sig.dk/basic.jpg fremgår lidt mere af idéen bag det. Her fremgår
strukturen på databasen også samt hvordan træet forventes opbygget.
Database-strukturen kan jo hurtigt smides i et multidimensionelt array med
fx.
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($res_array, $row);
}
Man står så med et multidimensionelt array der indeholder strukturen - men
kommer så til den "sjove" del hvor det reelt skal sorteres så datastrukturen
kan opbygges. Rækkefølgen de jo gerne skulle ende op i (baseret på 'id'
feltet i databasen) bliver jo:
2,5,6,11,4,9,10,1,13,3,12,8,7 (jf. .jpg filen)
I korte træk gennemløbes strukturen jo ved primært at kigge på om en node
har en child-reference. I så fald følges den. Hvis ikke følges en eventuel
n_sibling reference (next sibling). Hvis der heller ikke er en - eller hvis
den allerede har været fulgt - går vi et skridt tilbage igen. Det lugter jo
helt afgjort af en rekursiv opgave - men derfra og til at få den nedfældet
kommer problemet... Er der nogle der har nogle smarte idéer? Det er ikke
noget problem at lave noget skrammel-kode der løser problemet men det er der
jo ikke meget sjovt ved
PFT
/Michael