Kode di bawah ini akan membantu Anda memulai. Ini adalah "fungsi rekursif" - fungsi yang memanggil dirinya sendiri. Seperti yang baru saja disebutkan @Fake51, ini tidak terlalu efisien, tetapi seharusnya berhasil.
Anda memerlukan beberapa CSS untuk menyusun daftar yang telah Anda buat.
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();
Sunting:Karena masih belum ada jawaban yang diterima, inilah kode saya yang dimodifikasi untuk melakukan semuanya dengan satu kueri SQL yang seharusnya jauh lebih efisien, meskipun berpotensi sedikit lebih membingungkan. Lihat bagaimana hasilnya.
//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);