Der folgende Code sollte Ihnen den Einstieg erleichtern. Es ist eine "rekursive Funktion" - eine Funktion, die sich selbst aufruft. Wie @Fake51 gerade erwähnt hat, ist es nicht sehr effizient, aber es sollte funktionieren.
Sie benötigen etwas CSS, um die von Ihnen erstellte Liste zu strukturieren.
function showItems($parent = 0) {
$q = "SELECT id, name FROM category WHERE parent_id = $parent";
$q = mysql_query($q);
if(mysql_num_rows($q)) {
echo "<ul>";
while($r = mysql_fetch_row($q)) {
echo "<li>";
echo "<a href=\"page.php?id=".$r[0]."\">".htmlentities($r[1])."</a>";
showItems($r[0]);
echo "</li>"\n;
}
echo "</ul>\n";
}
}
showItems();
Bearbeiten:Da es immer noch keine akzeptierte Antwort gibt, ist hier mein Code geändert, um alles mit einer einzigen SQL-Abfrage zu erledigen, die viel effizienter sein sollte, wenn auch möglicherweise etwas verwirrender. Sehen Sie, wie es für Sie läuft.
//Recursive function to show menu items from a passed in array
function showItems(&$menu, $parent = 0) {
if(is_array($menu[$parent]) && sizeof($menu[$parent])) {
echo "<ul>";
foreach($menu[$parent] as $num=>$name) {
echo "<li>";
echo "<a href=\"page.php?id=".$num."\">".htmlentities($name)."</a>";
showItems($menu, $num);
echo "</li>\n";
}
echo "</ul>\n";
}
}
//Create a multi-dimensional array of ALL menu items, separated by parent
$menu = array();
$q = "SELECT id, name, parent_id FROM category ORDER BY order";
$q = mysql_query($q);
while($r = mysql_fetch_row($q)) {
$menu[$r[2]][$r[0]] = $r[1];
}
//Call the function
showItems($menu);