PHP算法 | 无限极递归分类

一、递归算法

<?php

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]);
            //递归调用
            getTree($array, $value['id'], $level+1);
        }
    }
    return $list;
}

二、引用算法

<?php

function getTree($array){
    //第一步 构造数据
    $items = [];
    foreach($array as $value){
        $items[$value['id']] = $value;
    }

    //第二部 遍历数据 生成树状结构
    $tree = [];
    foreach($items as $key => $value){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$key];
        }else{
            $tree[] = &$items[$key];
        }
    }
    return $tree;
}

猜你喜欢

转载自blog.csdn.net/weixin_41635750/article/details/107788258