php - 只计算多级菜单的前两级

标签 php mysql

我有表menu,其中包含以下列:idvalueid_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/

相关文章:

php while() 在 if/else 中循环似乎不起作用

javascript - 如何在点击时包含php文件

php - 停止更新每个类型页面的值被刷新

javascript - 如何在不刷新的情况下编辑和删除MySQL数据库的记录?

php - PHP中可以操作echo来写入文件吗

MySQL 查询确实计数然后显示附加数据

左连接时MySQL错误的计数值

php - 如何加入其他表并计算 laravel 中的行数?

mysql - 从存储引擎 InnoDB 得到错误 66 "Object is remote"

javascript - 在提交事件上调用 jQuery 重新加载页面