php递归实现无限级分类树

http://www.php.cn/php-weizijiaocheng-353267.html

递归算法

/*
* 递归实现无限极分类
* @param $array 分类数据
* @param $pid 父ID
* @param $level 分类级别
* @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进
*/
function getTree($array, $pid =0, $level = 0){
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid){
            //父节点为根节点的节点,级别为0,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            getTree($array, $value['id'], $level+1);
        }
}
    return $list;
}

function generateTree($array){
    //第一步 构造数据
    $items = array();
    foreach($array as $value){
        $items[$value['id']] = $value;
    }
    //第二部 遍历数据 生成树状结构
    $tree = array();
    //遍历构造的数据
    foreach($items as $key => $value){
        //如果pid这个节点存在
        if(isset($items[$value['pid']])){
            //把当前的$value放到pid节点的son中 注意 这里传递的是引用 为什么呢?
            $items[$value['pid']]['son'][] = &$items[$key];
        }else{
            $tree[] = &$items[$key];
        }
}
    return $tree;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://www.zgtx2019.com/read.php?tid=35 应用提交到AppStore审核周期...
    董朋远阅读 1,655评论 0 1
  • 深夜。刚写完一些文章,10元一篇的我写,200元一篇的我也写。我还要生存。 赚钱是我的刚需。 失败,做交易失败,做...
    LivingRoom阅读 3,455评论 2 6
  • 热气缭绕中,饺子出锅了。 北方有句俗语说:好吃不过饺子,舒服不过倒着。或许打出生后已吃过多次饺子,但真...
    一只可爱烁阅读 272评论 0 0
  • 从小到大,我从来没有看到过爸爸给妈妈买过玫瑰花,也从来没有看到妈妈给爸爸送过什么礼物,但是我却知道他们之间的爱与浪...
    朴樕_阅读 268评论 0 0