<?php
$list= array(
array('id' => 1, 'parent_node' => 'ff', 'addr' => '中国'), //根节点
array('id' => 2, 'parent_node' =>'中国' , 'addr' => '北京'),
array('id' => 3, 'parent_node' => '中国', 'addr' => '山东'),
array('id' => 4, 'parent_node' => '北京', 'addr' => '朝阳区'),
array('id' => 5, 'parent_node' =>'山东', 'addr' => '烟台市'),
array('id' => 6, 'parent_node' =>'山东', 'addr' => '莱山区'),
);
$result = getTree($list);
print_r($result);
function getTree($data, $parent_username = "ff")
{
$arr = [];
foreach ($data as $key => $val) {
if ($val['parent_node'] == $parent_username) { //找到根节点,开始遍历
unset($data[$key]); //把这个节点从数组中删除,防止后续递归
$val['children'] = getTree($data, $val['addr']);
$arr[] = $val;
}
}
return $arr;
}
?>
执行结果:
[root@ workspace]# php tree.php
Array
(
[0] => Array
(
[id] => 1
[parent_node] => ff
[addr] => 中国
[children] => Array
(
[0] => Array
(
[id] => 2
[parent_node] => 中国
[addr] => 北京
[children] => Array
(
[0] => Array
(
[id] => 4
[parent_node] => 北京
[addr] => 朝阳区
[children] => Array
(
)
)
)
)
[1] => Array
(
[id] => 3
[parent_node] => 中国
[addr] => 山东
[children] => Array
(
[0] => Array
(
[id] => 5
[parent_node] => 山东
[addr] => 烟台市
[children] => Array
(
)
)
[1] => Array
(
[id] => 6
[parent_node] => 山东
[addr] => 莱山区
[children] => Array
(
)
)
)
)
)
)
)
如何只获取末端节点的信息
<?php
$list= array(
array('id' => 1, 'parent_node' => 'ff', 'addr' => '中国'), //根节点
array('id' => 2, 'parent_node' =>'中国' , 'addr' => '北京'),
array('id' => 3, 'parent_node' => '中国', 'addr' => '山东'),
array('id' => 4, 'parent_node' => '北京', 'addr' => '朝阳区'),
array('id' => 5, 'parent_node' =>'山东', 'addr' => '烟台市'),
array('id' => 6, 'parent_node' =>'山东', 'addr' => '莱山区'),
);
$result = getTree($list);
$arr_end = array();
$result1 = getTreeEnd($result, $arr_end);
print_r($result1);
function getTree($data, $parent_username = "ff")
{
$arr = [];
foreach ($data as $key => $val) {
if ($val['parent_node'] == $parent_username) { //找到根节点,开始遍历
unset($data[$key]);
$val['children'] = getTree($data, $val['addr']);
$arr[] = $val;
}
}
return $arr;
}
function getTreeEnd($data, $arr_end)
{
foreach ($data as $key => $value) {
if(count($value['children'])==0) {
array_push($arr_end, $value);
}
else {
$arr_end = getTreeEnd($value['children'], $arr_end);
}
}
return $arr_end;
}
?>
执行结果:
[root@workspace]# php tree.php
Array
(
[0] => Array
(
[id] => 4
[parent_node] => 北京
[addr] => 朝阳区
[children] => Array
(
)
)
[1] => Array
(
[id] => 5
[parent_node] => 山东
[addr] => 烟台市
[children] => Array
(
)
)
[2] => Array
(
[id] => 6
[parent_node] => 山东
[addr] => 莱山区
[children] => Array
(
)
)
)