0

我有一个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在这个任务中获取元素。

如果有人知道如何在这种情况下开始创建递归函数,请告诉我,谢谢:)

4

2 回答 2

0

最好先把它变成树型结构:

Menu Top
  |
Nodes with NULL p_id
  |
Children

您可以通过创建一个具有子数组的 MenuNode 类来完成此操作。您不必这样做,但它可以更容易地创建一个递归函数来输出菜单。

于 2012-08-10T19:22:50.827 回答
-1

function generate_menu_list($parent_id) { $result = mysql_query("SELECT * FROM menu WHERE p_id ='$parent_id' order by sort_id"); if (result) { while ($row = mysql_fetch_array($result)) {
$count = mysql_query("SELECT count(0) as cnt FROM menu_master WHERE parent_id='".$row['id']."'") ; $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>';
  } 
}   

}

于 2017-08-13T09:13:38.413 回答