Problem med rekursiv funktion
Hej allesammen!Dette er mit første møde med rekursive funktionsudtryk og alvorlig brug af arrays. Indtil videre er jeg sådan set nået længere end jeg havde regnet med at gøre.
Jeg har en mængde poster i en database. Dataene er fordelt over følgende felter: id, tekst, url, parent, position. Parent er en reference til en anden post i tabellen. Meningen med mit script er hente disse data ud med kun en db-query - dvs. hente dataene ud i en array - og derefter stille dem op på en liste med over og underpunkter. I princippet med en uendelig mængde underniveau.
Resultatet, som det ser ud indtil videre, kan findes her: http://sobazz.dyndns.dk
Problemet er, som det ses på ovenstående adresse, at nogle data bliver hentet ud flere gange. Jeg har forsøgt at dæmme op for det på forskellig vis, men indtil videre uden resultat.
Her er min kode UDEN forsøg på at hindre udskrivning af samme post flere gang:
------------------------------------------------------
$query = mysql_query("SELECT id,tekst,parent,position FROM ".$GLOBALS['conf_table_menu']." ORDER BY parent,position") or die ("Error selecting menu data!");
while($result = mysql_fetch_array($query)){
$alldata[] = array("id" => $result['id'], "tekst" => $result['tekst'], "parent" => $result['parent'], "position" => $result['position']);
};
function buildTree($leveldata,$alldata) {
for($i=0;$i<count($leveldata);$i++) {
unset($buildAgain);
echo $leveldata[$i]['tekst']."<br>";
for($ia=0;$ia<count($alldata);$ia++) {
if(array_search($leveldata[$i]['id'],$alldata[$ia]) == "parent") {
$arrayName = $leveldata[$i]['id']."Array";
${$arrayName}[] = $alldata[$ia];
$buildAgain = "true";
} else {
}
}
if($buildAgain) {
buildTree($$arrayName,$alldata);
}
}
}
buildTree($alldata,$alldata);
--------------------------------------------------------
Og ja - jeg ved godt det er slamkode.... det kan garanteret gøres meget nemmere og meget bedre. Er der nogen, som kan se en løsning på problemet uden alt for store ændringer i scriptet?
Hilsen
Søren. B.