Problemer med en rekursiv funktion.
Hej eksperter.hjælp mig inden jeg hiver de sidste hår ud af hovedet på mig selv.
jeg har en rekursiv funktion som skal generere menu struktur ud fra min database
min database struktur ser således ud:
mysql> desc pages;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| pid | int(11) | | PRI | NULL | auto_increment |
| parent | int(11) | | | 0 | |
| page_name | tinytext | | | | |
| titel | text | | | | |
| content | text | | | | |
| template_id | int(11) | | | 0 | |
| status | int(1) | | | 0 | |
| position | int(11) | | | 0 | |
+-------------+----------+------+-----+---------+----------------+
jeg kommenterer lige de attributer der er væssentlig for funktionerne
pid definere det unikke felt for siden.
parent indeholder information om hvilken side, siden hører til hvis det ikke er en hovedside
page_name er det navn der skal bruges når man skal udskrive linket.
funktionen der generer min array struktur, har prøvet lidt af hvert kan man se med de kommenterede linier
function _getSubMenu($parent, $array) {
//var_dump($array);
$sql = "SELECT * FROM pages WHERE parent = '$parent'";
$qh = fetch($sql);
while ($row = mysql_fetch_assoc($qh))
{
//$array[] = array($row['pid'],$row['page_name'],$row['parent']);
$array[][$row['pid']] = $row['page_name'];
//$array[][$row['pid']][$row['page_name']] = $row['parent'];
$array[] = $this->_getSubMenu($row['pid'], $array[]);
}
mysql_free_result($qh);
return $array;
}
funktionen der viser menuen
function showSubMenu($submenu, $parent, $ident="<li>") {
//die(var_dump($submenu));
foreach($submenu as $key=>$val) {
if(!is_array($val)) {
if($val != NULL) {
//var_dump($val);
echo($ident);
?>
<a href="<?echo($phpself)?>?pid=<?echo($key);?>&parent=<?echo($parent);?>"><?echo($val);?></a>
<?
}
}
else
{
showSubMenu($val, $parent, $ident);
}
}
}
mit problem er at jeg gerne vil have at rykker en plads ind hvis en af menu punkterne er et under menu punkt til det menu punkt der blev udskrevet før og rykker tilbage igen hvis det er et nyt menu punkt
altså ala
hvorfor
-fordi
--ok
tralala
-teste
woho
osv.
jeg er ikke en ørn til rekursive funktioner så det kan godt være at begge funktioner skal ændres
sig endlig til hvis der skal flere point til at løse problemet ! :)
mvh.
Daniel som er ved at være godt skaldet efter alle de hår han har revet ud af hovedet
