无限极分类代码

原始数组:

$arr = [
            ['id'=>1,'name'=>'北京市','pid'=>0],
            ['id'=>2,'name'=>'内蒙古','pid'=>0],
            ['id'=>3,'name'=>'朝阳区','pid'=>4],
            ['id'=>4,'name'=>'北京市','pid'=>1],
            ['id'=>5,'name'=>'呼和浩特市','pid'=>2],
            ['id'=>6,'name'=>'新城区','pid'=>5],
        ];

递归算法:

public function recurTree($arr,$pid){
        $tree = [];
        foreach ($arr as $k=>$v){
            if($v['pid']==$pid){
                unset($arr[$k]);
                $v['child'] = $this->recurTree($arr,$v['id']);
                $tree[] = $v;
            }
        }

        return $tree;
    }

数组引用法:

public function referenceTree($arr){
        $tree = [];
        $indexArr = [];
        foreach ($arr as $key=>$val){
            $indexArr[$val['id']] = &$arr[$key];
        }

        foreach ($indexArr as $k=>$v){
            echo $v['name'].'<br>';
            if($v['pid']==0){
                $tree[] = &$indexArr[$k];
            }else{
                $indexArr[$v['pid']]['child'][] = &$indexArr[$k];
            }
        }

        return $tree;
    }
posted @ 2020-10-22 19:45  haopengfly  阅读(106)  评论(0)    收藏  举报