public function test() {
$dataList = [
['parent_id' => '0', 'id' => '1', 'title' => '父1'],
['parent_id' => '3', 'id' => '2', 'title' => '孙4-4'],
['parent_id' => '4', 'id' => '3', 'title' => '子4-3'],
['parent_id' => '0', 'id' => '4', 'title' => '父4'],
];
$new_level = [];
foreach ($dataList as $v) {
$tmp_level = $this->buildLevel($v, $new_level);
$new_level = $tmp_level['data'];
if (!empty($tmp_level['tmp'])) {
$new_level[] = $tmp_level['tmp'];
}
}
print_r($new_level);
}
public function buildLevel($target, $source) {
$target['children'] = [];
$rtn_data = [];
$source_data = $source;
$find = false;
$parent_key = 0;
$find_parent = false;
$find_child = false;
$children_data = [];
foreach ($source as $k => $v) {
if ($v['id'] == $target['parent_id']) {
$find_parent = true;
$find = true;
$parent_key = $k;
} else if ($v['parent_id'] == $target['id']) {
$target['children'][] = $v;
unset($source_data[$k]);
$find_child = true;
$find = true;
} else if (!empty($v['children'])) {
$tmp = $this->buildLevel($target, $v['children']);
$source_data[$k]['children'] = $tmp['data'];
if (empty($tmp['tmp'])) {
$find = true;
}
}
}
if ($find_parent) {
$source_data[$parent_key]['children'][] = $target;
} else if ($find_child) {
$source_data[] = $target;
}
$rtn_data['data'] = $source_data;
if (!$find) {
$rtn_data['tmp'] = $target;
}
return $rtn_data;
}显示:Array
(
[0] => Array
(
[parent_id] => 0
[id] => 1
[title] => 父1
[children] => Array
(
)
)
[3] => Array
(
[parent_id] => 0
[id] => 4
[title] => 父4
[children] => Array
(
[0] => Array
(
[parent_id] => 4
[id] => 3
[title] => 子4-3
[children] => Array
(
[0] => Array
(
[parent_id] => 3
[id] => 2
[title] => 孙4-4
[children] => Array
(
)
)
)
)
)
)
)
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。