我有一个mysql
表结构,如下所示:
CREATE TABLE IF NOT EXISTS menu(
id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
p_id INT(5), -- parent id
sort_id INT(5) NOT NULL, -- for position
title VARCHAR(50) NOT NULL,
etc ...);
数据结构将是这样的:
id | p_id | sort_id | title
1 | NULL | 1 | root_1
2 | 1 | 1 | sub1 of root_1
3 | 1 | 2 | sub2 of root_1
4 | NULL | 2 | root_2
5 | 2 | 1 | sub1 of root_2
6 | 2 | 2 | sub2 of root_2
7 | 3 | 1 | sub1 of `sub2 of root_1`
我已经创建了一个php脚本来显示一个级别的子菜单,但我无法决定如何获得其他级别。我认为需要一个递归函数,例如,在此任务中获取sub1 of sub2 of root_1
元素。
如果有人知道如何在这种情况下开始创建递归函数,请告诉我,谢谢:)
答案 0 :(得分:0)
最好先将其转换为树型结构:
Menu Top
|
Nodes with NULL p_id
|
Children
您可以通过创建一个包含子数组的MenuNode类来完成此操作。您不必这样做,但它将使创建递归函数更容易输出菜单。
答案 1 :(得分:-1)
function generate_menu_list($ parent_id)
{
$ result = mysql_query(" SELECT * FROM menu WHERE p_id =' $ parent_id' order by sort_id");
如果(结果)
{
while($ row = mysql_fetch_array($ result))
{
$ count = mysql_query(" SELECT count(0)as cnt FROM menu_master WHERE parent_id ='"。$ row [' id']。"&#39 ;&#34);
$ countrow = mysql_fetch_array($ count);
echo '<li><a href="'$linktoredirect.'"><span class="fa fa-user"></span>'.$row['title '].'</a> ';
if($countrow['cnt']>0)
{
echo '<ul>';
$this->generate_menu_list($row['id']);
echo '</ul>';
}
echo '</li>';
}
}
}