Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP递归函数生成树结构菜单_Php - Fatal编程技术网

PHP递归函数生成树结构菜单

PHP递归函数生成树结构菜单,php,Php,我已经创建了一个MySQL数据库表,我想在其中显示基于其父级的菜单结构。菜单表包含以下数据: id | menuname | parentid ---+-------------------+--------- 1 | dashboard | 0 2 | Content | 0 3 | Home Page Content | 2 4 | Banners | 2

我已经创建了一个MySQL数据库表,我想在其中显示基于其父级的菜单结构。菜单表包含以下数据:

id | menuname          | parentid
---+-------------------+---------
 1 | dashboard         |        0
 2 | Content           |        0
 3 | Home Page Content |        2
 4 | Banners           |        2
 5 | Settings          |        0
 6 | Block Content     |        3
 7 | Site Content      |        3
使菜单结构看起来像:

  • 仪表板
  • 内容
    • 主页内容
      • 块内容
      • 网站内容
  • 横幅
  • 背景
我已经看过这里的邮局了
但是,我无法理解基础知识。然而,我明白我需要编写一个递归函数来解决这个问题。有人能告诉我如何生成上述内容吗?

想象一下,您是通过sql查询从数据库中选择的

SELECT * FROM my_table ORDER BY parentid ASC, id ASC
在PHP中有这个数组

$arr = [

    [
        "id"=>1,
        "username"=>"dashboard",
        "parentid"=>0
    ],
    [
        "id"=>2,
        "username"=>"dashboard",
        "parentid"=>0
    ],
    [
        "id"=>5,
        "username"=>"dashboard",
        "parentid"=>0
    ],
    [
        "id"=>3,
        "username"=>"dashboard",
        "parentid"=>2
    ],
    [
        "id"=>4,
        "username"=>"dashboard",
        "parentid"=>2
    ],
    [
        "id"=>6,
        "username"=>"dashboard",
        "parentid"=>3
    ],
    [
        "id"=>7,
        "username"=>"dashboard",
        "parentid"=>3
    ],

];

$categories = [];
    foreach ($arr as $item){
        if($item["parentid"]==0){
            $categories[$item["id"]] = $item;
        }else{
            $categories[$item["parentid"]]["subs"][] = $item;
        }
    }

对于初学者,您应该使用
select*from my_table order by parentid ASC,id ASC
,其余的将需要PHP逻辑。另外,为什么在您的示例中,
banner
不是
Content
的子项?如果您对MySQL中的分层表结构和查询感兴趣,那么您可以查看