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 ]
  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/hinq/p/13596205.html
Copyright © 2011-2022 走看看