Как построить древовидный массив по уровню?

В PHP древовидный массив представляет собой массив, в котором каждый элемент может содержать другие элементы в качестве вложенных массивов. Построение древовидного массива по уровню требует определенного алгоритма, который мы рассмотрим далее.

Для начала, имея некоторые данные, которыми мы хотим заполнить наш древовидный массив, мы должны определить структуру массива и правила вложенности элементов. Предположим, что у нас есть данные, представленные в виде массива, где каждый элемент содержит идентификатор родительского элемента и уровень вложенности:

$data = [
    ['id' => 1, 'name' => 'Element 1', 'parent_id' => 0, 'level' => 0],
    ['id' => 2, 'name' => 'Element 2', 'parent_id' => 1, 'level' => 1],
    ['id' => 3, 'name' => 'Element 3', 'parent_id' => 1, 'level' => 1],
    ['id' => 4, 'name' => 'Element 4', 'parent_id' => 2, 'level' => 2],
    ['id' => 5, 'name' => 'Element 5', 'parent_id' => 2, 'level' => 2],
    // и так далее...
];

Алгоритм построения древовидного массива по уровню можно разбить на следующие шаги:

1. Создать главный массив, который будет содержать все элементы древовидной структуры:

$tree = [];

2. Пройтись по исходным данным и для каждого уровня вложенности создать подмассив внутри главного массива. Это гарантирует, что в дальнейшем каждый элемент будет помещен в нужную ветку дерева. Для этого можно использовать цикл foreach:

foreach ($data as $item) {
    $level = $item['level'];
    $tree[$level][] = $item;
}

3. Теперь, когда мы имеем массив сгруппированных элементов по уровням вложенности, мы можем приступить к построению древовидной структуры. Для этого мы будем рекурсивно проходить по уровням, начиная с самого верхнего уровня, и для каждого элемента будет искать его дочерние элементы, чтобы поместить их в ветку этого элемента. Для реализации этого алгоритма можно использовать рекурсивную функцию:

function buildTree($tree, $level = 0) {
    if (!isset($tree[$level])) {
        return [];
    }
    
    $result = [];
    foreach ($tree[$level] as $item) {
        $item['children'] = buildTree($tree, $level + 1);
        $result[] = $item;
    }
    
    return $result;
}

$tree = buildTree($tree);

4. В результате выполнения алгоритма мы получим древовидный массив $tree, в котором каждый элемент будет содержать свойство $children, содержащее массив дочерних элементов. Таким образом, наше древовидное дерево будет полностью построено.

Надеюсь, данное объяснение помогло вам понять, как построить древовидный массив по уровню в PHP.