• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php递归生成后台菜单数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

递归函数:  自己调用自己 , 在多层逻辑(>=3)的时候就考虑递归函数了; 个人理解小于3层逻辑的还是用foreach循环处理数据, 毕竟使用递归函数开销还是比较大的 , 而且没有写好判断条件的话 很容易出现死循环(这个就很危险了)

 

一般后台菜单生成逻辑:

1:先从数据库中查询出所有有效的菜单数据(创建数据的时候就已经绑定了上下级关系)基本上也是一个二维数组数据;  如下(我自己手动创造的数据)

 1 $arr = [
 2             [
 3                 'id' =>1,
 4                 'pid'=>0,
 5                 'is_menu'=>1,
 6                 'name' => '商城管理'
 7             ],
 8             [
 9                 'id' =>2,
10                 'pid'=>1,
11                 'is_menu'=>1,
12                 'name' =>'店铺列表'
13             ],
14             [
15                 'id' =>3,
16                 'pid'=>1,
17                 'is_menu'=>1,
18                 'name' =>'商品列表'
19             ],
20             [
21                 'id' =>4,
22                 'pid'=>2,
23                 'is_menu'=>1,
24                 'name' =>'店铺设置'
25             ],
26             [
27                 'id' =>5,
28                 'pid'=>2,
29                 'is_menu'=>1,
30                 'name' =>'店铺信息'
31             ],
32             [
33                 'id' =>6,
34                 'pid'=>3,
35                 'is_menu'=>0,
36                 'name' =>'添加商品'
37             ],
38             [
39                 'id' =>7,
40                 'pid'=>1,
41                 'is_menu'=>1,
42                 'name' =>'商品分类管理'
43             ],
44             [
45                 'id' =>7,
46                 'pid'=>3,
47                 'is_menu'=>0,
48                 'name' =>'编辑商品'
49             ]
50         ];

 

### 递归函数

 1 function create_tree_list( $pid , $arr, &$tree = [] ){
 2     foreach ( $arr as $key => $vo ){
 3         if( $vo['pid'] == $pid ){
 4             $c= create_tree_list( $vo['id'] ,$arr );
 5             if( $c ){
 6                 $vo['children'] = $c;
 7             }
 8             $tree[] = $vo;
 9         }
10     }
11     return $tree;
12 }

### 调用递归函数

1 $pid = 0; //默认从第一层数据开始
2 $tree_list = create_tree_list( $pid , $arr );
3 return $tree_list;

###得到的数据结果

 1 [
 2     {
 3         "id": 1,
 4         "pid": 0,
 5         "is_menu": 1,
 6         "name": "商城管理",
 7         "children": [
 8             {
 9                 "id": 2,
10                 "pid": 1,
11                 "is_menu": 1,
12                 "name": "店铺列表",
13                 "children": [
14                     {
15                         "id": 4,
16                         "pid": 2,
17                         "is_menu": 1,
18                         "name": "店铺设置"
19                     },
20                     {
21                         "id": 5,
22                         "pid": 2,
23                         "is_menu": 1,
24                         "name": "店铺信息"
25                     }
26                 ]
27             },
28             {
29                 "id": 3,
30                 "pid": 1,
31                 "is_menu": 1,
32                 "name": "商品列表",
33                 "children": [
34                     {
35                         "id": 6,
36                         "pid": 3,
37                         "is_menu": 0,
38                         "name": "添加商品"
39                     },
40                     {
41                         "id": 7,
42                         "pid": 3,
43                         "is_menu": 0,
44                         "name": "编辑商品"
45                     }
46                 ]
47             },
48             {
49                 "id": 7,
50                 "pid": 1,
51                 "is_menu": 1,
52                 "name": "商品分类管理"
53             }
54         ]
55     }
56 ]

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
linux编译php7.0发布时间:2022-07-10
下一篇:
phpsoap连接https的wsdl报错SOAP-ERROR:ParsingWSDL:Couldn'tloadfrom发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap