@JohnxFFF

Как построить дерево?

Добрый день, уже час залипаю, пытаясь придумать как адекватно построить дерево.

есть массив:
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


Скорее всего нужно использовать рекурсию, подтолкните пожалуйста, не могу придумать как нормально формировать, на любой вложенности
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
0xD34F
@0xD34F
function createTree($data, $depthField) {
  $tree = [];

  foreach ($data as $n) {
    $arr = &$tree;

    for ($depth = 0; $n[$depthField] > $depth; $depth++) {
      $arr = &$arr[count($arr) - 1]['children'];
    }

    $arr[] = array_merge($n, [ 'children' => [] ]);
  }

  return $tree;
}


$tree = createTree($arr, 'depth');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы