php处理无限极分类数据的两种方式

开发过程中,经常会遇到处理无限分类数据,这里就介绍一下处理无限分类数据的两种方式,有不对的地方,还望多多指正。

//测试数据
$array=array(
    ['id'=>1,'parent_id'=>0,'name'=>1],
    ['id'=>2,'parent_id'=>0,'name'=>2],
    ['id'=>3,'parent_id'=>1,'name'=>3],
    ['id'=>4,'parent_id'=>1,'name'=>4],
    ['id'=>5,'parent_id'=>3,'name'=>5],
    ['id'=>6,'parent_id'=>3,'name'=>6]
);
//递归方式
function recursion($array,$parent_id=0){
    $new=[];
    foreach($array as $k=>$v){
        if($v['parent_id']==$parent_id){
           $v['child']=recursion($array,$v['id']);
            if (!$v['child']) {
                unset($v['child']);
            }
            $new[] = $v;
        }
    }
    return $new;
}

//引用
function quote($array){
    $items=array();
    foreach($array as $k=>$v){
       $items[$v['id']]=$v;
    }
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['parent_id']])){
            $items[$item['parent_id']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}