无限级分类,分别采用的递归、引用解决方案
$arr = [
['pid' => 0, 'name' => '广东', 'id' => 1],
['pid' => 1, 'name' => '深圳', 'id' => 2],
['pid' => 2, 'name' => '坂田', 'id' => 3],
['pid' => 0, 'name' => '广西', 'id' => 4],
['pid' => 4, 'name' => '南宁', 'id' => 5],
];
//递归
function recursion($arr, $id=0){
$temp = [];
foreach($arr as $k => $v){
//先找顶级节点
if($v['pid'] == $id){
$temp[$v['id']] = $v;
unset($arr[$k]);
//再找儿子
$temp[$v['id']]['son'] = recursion($arr,$v['id']);
}
}
unset($arr);
return $temp;
}
//引用
function ref($arr){
$temp = [];
$arr = array_column($arr,null,'id');
foreach($arr as $id => $v){
//先找顶级节点
if($v['pid'] == 0){
$temp[] = &$arr[$id];
}else{
//再找儿子
$arr[$v['pid']]['son'][] = &$arr[$id];
}
}
return $temp;
}
总结:在做无限级分类中,递归算法逻辑清晰,比较好理解,但性能不强,适用小数据量的场景;而引用则较费脑,可是性能强大,适用大数据量的场景。