• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php菜单/评论数据递归分级算法的实现方法

    在开发过程中经常会遇到分级场景,如菜单分级、评论、商品类型分级等;在同一张mysql数据表中可能设计单表结构,如同如下数据:

     $menuList = [
      [ 'id' => 1,'parent_id' => 0, 'name' => '节点1'],
      [ 'id' => 2,'parent_id' => 1, 'name' => '节点1-1'],
      [ 'id' => 3,'parent_id' => 0, 'name' => '节点2'],
      [ 'id' => 4,'parent_id' => 3, 'name' => '节点2-1'],
      [ 'id' => 5,'parent_id' => 2, 'name' => '节点1-1-1'],
      [ 'id' => 6,'parent_id' => 1, 'name' => '节点1-2'],
     ];

    这时候在处理展示过程就需要将上面的结构转换为更加直观的数据结构, 形如:

    $treeList = [
     [
     children: [
      children: []
     ]
     ]
     [,
     children: [
      children: []
     ]
     ]
    ];

    算法代码如下:

    ?php
    
    class Menu
    {
     /**
      * 递归循环菜单列表, 转化为菜单树
      * @param $treeList 菜单树列表
      * @param $menuList 菜单列表
      * @return bool
      */
     public function getMenuTree($treeList, $menuList)
     {
      // 初始化顶级父节点
      if (! count($treeList)) {
       foreach($menuList as $index => $menu) {
        if ($menu['parent_id'] == 0) {
         $treeList[] = $menu;
         unset($menuList[$index]);
        }
       }
      }
    
      // 递归查找子节点
      foreach ($treeList as $tree) {
       foreach ($menuList as $index => $menu) {
        if (empty($tree['children'])) {
         $tree['children'] = [];
        }
        if ($menu['parent_id'] == $tree['id']) {
         $tree['children'][] = $menu;
         unset($menuList[$index]);
        }
       }
       if (! empty($tree['children'])) {
        $this->getMenuTree($tree['children'], $menuList);
       } else {
        // 递归临界点
        return false;
       }
      }
     }
    
    }
    
    $menuList = [
     [ 'id' => 1,'parent_id' => 0, 'name' => '节点1'],
     [ 'id' => 2,'parent_id' => 1, 'name' => '节点1-1'],
     [ 'id' => 3,'parent_id' => 0, 'name' => '节点2'],
     [ 'id' => 4,'parent_id' => 3, 'name' => '节点2-1'],
     [ 'id' => 5,'parent_id' => 2, 'name' => '节点1-1-1'],
     [ 'id' => 6,'parent_id' => 1, 'name' => '节点1-2'],
    ];
    $treeList = [];
    (new Menu)->getMenuTree($treeList, $menuList);
    print_r($treeList);

    happy coding!

    每一个不曾起舞的日子,都是对生命的辜负 ^-^

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • php求斐波那契数的两种实现方式【递归与递推】
    • PHP实现无限极分类的两种方式示例【递归和引用方式】
    • PHP利用递归函数实现无限级分类的方法
    • PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
    • PHP递归写入MySQL实现无限级分类数据操作示例
    • PHP数组递归排序实现方法示例
    • PHP迭代与递归实现无限级分类
    • PHP实现递归的三种方法
    上一篇:PHP实现微信提现(企业付款到零钱)
    下一篇:使用composer 安装 laravel框架的方法图文详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php菜单/评论数据递归分级算法的实现方法 php,菜单,评论,数据,递归,