Array
(
[4] => Array
(
[id] => 4
[name] => Корень 1
[lft] => 1
[rgt] => 8
[depth] => 0
[tree] => 4
)
[5] => Array
(
[id] => 5
[name] => Второй уровень
[lft] => 2
[rgt] => 5
[depth] => 1
[tree] => 4
)
[7] => Array
(
[id] => 7
[name] => Третий уровень
[lft] => 3
[rgt] => 4
[depth] => 2
[tree] => 4
)
[6] => Array
(
[id] => 6
[name] => Второй уровень (2)
[lft] => 6
[rgt] => 7
[depth] => 1
[tree] => 4
)
[8] => Array
(
[id] => 8
[name] => Корень 2
[lft] => 1
[rgt] => 2
[depth] => 0
[tree] => 8
)
)[
name => Корень 1
children => [
[
name => Второй уровень,
children => [
name => Третий уровень,
],
],
[
name => Второй уровень (2),
]
],
],
[
name => Корень 2
]
=====================================
Корень 1
- Второй уровень
- - Третий уровень
- Второй уровень(2)
Корень 2
function createTree($data, $levelKey, $childrenKey) {
$tree = [];
foreach ($data as $n) {
$arr = &$tree;
for ($level = $data[0][$levelKey]; $n[$levelKey] > $level; $level++) {
$arr = &$arr[count($arr) - 1][$childrenKey];
}
$arr[] = $n + [ $childrenKey => [] ];
}
return $tree;
}
$tree = createTree($arr, 'depth', 'children');function createTree($data, $params = []) {
$levelKey = $params['levelKey'] ?? 'level';
$childrenKey = $params['childrenKey'] ?? 'children';
$root = [];
$parents = [ $data[0][$levelKey] => &$root ];
foreach ($data as $n) {
$n[$childrenKey] = [];
$level = $n[$levelKey];
$p = &$parents[$level];
$p[] = $n;
$parents[-~$level] = &$p[~-count($p)][$childrenKey];
}
return $root;
}
$tree = createTree($arr, [ 'levelKey' => 'depth' ]);