zoukankan      html  css  js  c++  java
  • php 递归生成后台菜单数据

    递归函数:  自己调用自己 , 在多层逻辑(>=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 ]
  • 相关阅读:
    javascript 延迟
    ashx获取另一个页面的返回内容
    Handler实现数据模板
    font-face 在 Firefox无法正常工作问题
    离线缓存 manifest
    事件 event
    源码学习
    调试
    Icon font font face
    aria-label
  • 原文地址:https://www.cnblogs.com/hinq/p/13596205.html
Copyright © 2011-2022 走看看