<?php
$users = [
1 => ['id' => 1, 'name' => '及时雨(宋江)', 'leader_id' => 0],
2 => ['id' => 2, 'name' => '玉麒麟(卢俊义)', 'leader_id' => 0],
3 => ['id' => 3, 'name' => '智多星(吴用)', 'leader_id' => 1],
4 => ['id' => 4, 'name' => '神机军师(朱武)', 'leader_id' => 2],
5 => ['id' => 5, 'name' => '黑旋风(李逵)', 'leader_id' => 1],
6 => ['id' => 6, 'name' => '浪子(燕青)', 'leader_id' => 2],
7 => ['id' => 7, 'name' => '没面目(焦挺)', 'leader_id' => 5],
8 => ['id' => 8, 'name' => '白花蛇(杨春)', 'leader_id' => 4],
9 => ['id' => 9, 'name' => '跳涧虎(陈达)', 'leader_id' => 8],
];
$tree = $group_by_higher = [];
foreach ($users as $user) {
if ($user['leader_id'] == 0) {
$user['sublist'] = [];
$tree[] = $user;
} else {
if (!isset($group_by_higher[$user['leader_id']])) {
$group_by_higher[$user['leader_id']] = [];
}
$group_by_higher[$user['leader_id']][] = $user;
}
}
foreach ($tree as $key => $item) {
$tree[$key] = tree_recursion($users, $group_by_higher, $item['id']);
}
print_r($tree);
function tree_recursion($list, $group, $id)
{
$item = $list[$id];
$item['sublist'] = [];
$result = $item;
if (isset($group[$id])) {
foreach ($group[$id] as $item) {
$result['sublist'][] = tree_recursion($list, $group, $item['id']);
}
}
return $result;
}
返回值:
Array
(
[0] => Array
(
[id] => 1
[name] => 及时雨(宋江)
[leader_id] => 0
[sublist] => Array
(
[0] => Array
(
[id] => 3
[name] => 智多星(吴用)
[leader_id] => 1
[sublist] => Array
(
)
)
[1] => Array
(
[id] => 5
[name] => 黑旋风(李逵)
[leader_id] => 1
[sublist] => Array
(
[0] => Array
(
[id] => 7
[name] => 没面目(焦挺)
[leader_id] => 5
[sublist] => Array
(
)
)
)
)
)
)
[1] => Array
(
[id] => 2
[name] => 玉麒麟(卢俊义)
[leader_id] => 0
[sublist] => Array
(
[0] => Array
(
[id] => 4
[name] => 神机军师(朱武)
[leader_id] => 2
[sublist] => Array
(
[0] => Array
(
[id] => 8
[name] => 白花蛇(杨春)
[leader_id] => 4
[sublist] => Array
(
[0] => Array
(
[id] => 9
[name] => 跳涧虎(陈达)
[leader_id] => 8
[sublist] => Array
(
)
)
)
)
)
)
[1] => Array
(
[id] => 6
[name] => 浪子(燕青)
[leader_id] => 2
[sublist] => Array
(
)
)
)
)
)