php递归实现无限极分类
一、数组
$categories = array(
array('id'=>1,'name'=>'陕西','parent_id'=>0),
array('id'=>2,'name'=>'西安','parent_id'=>1),
array('id'=>3,'name'=>'长安区','parent_id'=>2),
array('id'=>4,'name'=>'河南','parent_id'=>0),
array('id'=>5,'name'=>'郑州','parent_id'=>4),
array('id'=>6,'name'=>'河北','parent_id'=>0),
array('id'=>7,'name'=>'石家庄','parent_id'=>6),
array('id'=>8,'name'=>'新华区','parent_id'=>7));
二、递归实现无限极分类
//1、递归实现无限极分类
function getTree($array, $pid = 0, $level = 1)
{
// dd($array);
$list =array();
foreach ($array as $key=>$v) {
if ($v['parent_id'] == $pid) {
$v['level'] = $level;
$v['node']=getTree($array, $v['id'], $level + 1);
$list[] = $v;
//把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]);
}
}
return $list;
}
//2、递归实现无限极分类数组层级缩进转换 注意:带level深度的
function getTree2($array, $pid = 0, $level = 1){
static $list = [];
foreach ($array as $key=>$v) {
if ($v['parent_id'] == $pid) {
$v['level'] = $level;
$list[] = $v;
//把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]);
getTree2($array, $v['id'], $level + 1);
}
}
return $list;
}
三、效果
1、递归方式
Array
(
[1] => Array
(
[id] => 1
[name] => 陕西
[parent_id] => 0
[node] => Array
(
[0] => Array
(
[id] => 2
[name] => 西安
[parent_id] => 1
[node] => Array
(
[0] => Array
(
[id] => 3
[name] => 长安区
[parent_id] => 2
)
)
)
)
)
[4] => Array
(
[id] => 4
[name] => 河南
[parent_id] => 0
[node] => Array
(
[0] => Array
(
[id] => 5
[name] => 郑州
[parent_id] => 4
)
)
)
[6] => Array
(
[id] => 6
[name] => 河北
[parent_id] => 0
[node] => Array
(
[0] => Array
(
[id] => 7
[name] => 石家庄
[parent_id] => 6
[node] => Array
(
[0] => Array
(
[id] => 8
[name] => 新华区
[parent_id] => 7
)
)
)
)
)
)
2、数组层级缩进 带level深度的
Array ( [0] => Array ( [id] => 1 [name] => 陕西 [parent_id] => 0 [level] => 1 ) [1] => Array ( [id] => 2 [name] => 西安 [parent_id] => 1 [level] => 2 ) [2] => Array ( [id] => 3 [name] => 长安区 [parent_id] => 2 [level] => 3 ) [3] => Array ( [id] => 4 [name] => 河南 [parent_id] => 0 [level] => 1 ) [4] => Array ( [id] => 5 [name] => 郑州 [parent_id] => 4 [level] => 2 ) [5] => Array ( [id] => 6 [name] => 河北 [parent_id] => 0 [level] => 1 ) [6] => Array ( [id] => 7 [name] => 石家庄 [parent_id] => 6 [level] => 2 ) [7] => Array ( [id] => 8 [name] => 新华区 [parent_id] => 7 [level] => 3 ) )
代码改变世界!