我有表menu
,其中包含以下列:id
、value
、id_parent
。
在模型中:
public function getMenu()
{
$sql = "SELECT * FROM menu";
return $this->db->query($sql);
}
在 Controller 中:
public function adminNavMenu()
{
$this->data['menu'] = $this->model->getMenu();
$result = [];
foreach ($this->data['menu'] as $key => $value) {
if ($value['id_parent'] == 0) {
$result[$value['id']] = $value;
} else {
$result[$value['id_parent']]['children'][] = $value;
}
}
}
但它只计算多级菜单的前两级。我尝试应用循环或递归,但我不能...
请帮助我纠正错误。
原始菜单 View :
Menu1
Menu2->
Menu2-1
Menu2-2
Menu2-3->
Menu2-3-1
var_dump($result)
之后输出无效;
Array
(
[1] => Array
(
[id] => 1
[value] => Menu1
[id_parent] => 0
)
[2] => Array
(
[id] => 2
[value] => Munu2
[id_parent] => 0
[children] => Array
(
[0] => Array
(
[id] => 3
[value] => Menu2-1
[id_parent] => 2
)
[1] => Array
(
[id] => 4
[value] => Menu2-2
[id_parent] => 2
)
[2] => Array
(
[id] => 5
[value] => Menu2-3
[id_parent] => 2
)
)
)
[5] => Array
(
[children] => Array
(
[0] => Array
(
[id] => 6
[value] => Menu2-3-1
[id_parent] => 5
)
)
)
)
最佳答案
从下面的代码你可以得到一些想法:
<?php
function get_menu_tree($parent_id)
{
global $con;
$menu = "";
$sqlquery = " SELECT * FROM menu where id_parent='" .$parent_id . "' "; // put your query
$res=mysqli_query($con,$sqlquery);
while($row=mysqli_fetch_array($res,MYSQLI_ASSOC))
{
$menu .="<li>".$row['value']."</a>";
$menu .= "<ul>".get_menu_tree($row['id'])."</ul>"; //call recursively
$menu .= "</li>";
}
return $menu;
}
?>
调用此函数:
<?php echo get_menu_tree(0);//start from root menus having parent id 0 ?>
关于php - 只计算多级菜单的前两级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129645/