@iva3682

Как преобразовать массив в дерево, если известны глубины вложенности элементов?

Есть массив:

[
    [
        'depth' => 0,
        'children' => []
    ],
    [
        'depth' => 1,
        'children' => []
    ],
    [
        'depth' => 2,
        'children' => []
    ],
    [
        'depth' => 3,
        'children' => []
    ],
    [
        'depth' => 1,
        'children' => []
    ],
    [
        'depth' => 0,
        'children' => []
    ],
    ...
]

где 'depth' => значение глубины для текущего элемента. Значение depth заранее никак не ограниченно, но всегда идет по порядку cверху вниз. Так вот, как из вышеуказанного массива сделать такой:

[
    [
        'depth' => 0,
        'children' => [
            [
                'depth' => 1,
                'children' => [
                    [
                        'depth' => 2,
                        'children' => [
                            [
                                'depth' => 3,
                                'children' => []
                            ]
                        ]
                    ]
                ]
            ],
            [
                'depth' => 1,
                'children' => []
            ]
        ]
    ],
    [
        'depth' => 0,
        'children' => []
    ],
    ...
]
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
0xD34F
@0xD34F
function makeTree($data, $levelField) {
  $root = [];

  foreach ($data as $d) {
    $arr = &$root;

    $level = 0;
    while ($d[$levelField] > $level++) {
      $arr = &$arr[count($arr) - 1]['children'];
    }

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

  return $root;
}

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

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

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