PHP 实现无限级分类的方式

引用式(性能更好)

  • 引用式无限极分类
  • 必须存在主键id 必须存在父级 pid
$data=[
       ['id'=>1,'pid'=>0,'name'=>'a1'],
       ['id'=>2,'pid'=>1,'name'=>'a2'],
       ['id'=>3,'pid'=>1,'name'=>'a3'],
       ['id'=>4,'pid'=>2,'name'=>'a4'],
       ['id'=>5,'pid'=>0,'name'=>'a5'],
  ];

function getTreeList($data){
        $list=array_column($data,null,'id');
        $tree=[];
        foreach ($list as $k=>&$v){
            $pid=$v['pid'];
            //如果存在爸爸
            if (isset($list[$pid])){
//将自己放到爸爸的儿子列表中,注意是引用类型,这个操作会同步修改其它引用了爸爸的数据,如tree结构,
//这个操作非常关键,也就是说你给爸爸添加了儿子,那么其它引用了爸爸($list[$pid])的数据一样会添加儿子,即tree结构会被同步修改
                $list[$pid]['children'][]=&$v;
            }else{
                $tree[]=&$v;
            }
        }
      return $tree;
}

递归式

递归的方式就不多说了,直接上代码,用心领会吧

function tree(&$list,$pid=0,$level=0,$html='      &nbsp')
{
    static $tree = array();
    foreach($list as $v){
        if($v['pid'] == $pid){
            $v['sort'] = $level;
            $v['html'] = str_repeat($html,$level);
            $tree[] = $v;
            tree($list,$v['role_id'],$level+1);
        }
    }
    return $tree;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容