У меня есть массив массивов php, возвращенный внешней системой в следующем формате
$elements = [
[
'id' => 1,
'name' => 'Element 1',
'parent_id' => 0
],
[
'id' => 2,
'name' => 'Element 2',
'parent_id' => 0
],
[
'id' => 3,
'name' => 'Element 3',
'parent_id' => 1
],
[
'id' => 4,
'name' => 'Element 4',
'parent_id' => 1
],
[
'id' => 5,
'name' => 'Element 5',
'parent_id' => 1
],
[
'id' => 6,
'name' => 'Element 6',
'parent_id' => 2
],
[
'id' => 7,
'name' => 'Element 7',
'parent_id' => 2
],
[
'id' => 8,
'name' => 'Element 8',
'parent_id' => 3
],
[
'id' => 9,
'name' => 'Element 9',
'parent_id' => 3
],
[
'id' => 10,
'name' => 'Element 10',
'parent_id' => 3
]
];
Если это поможет, эта структура, "переведенная" в дерево, будет выглядеть так:
- Элемент 1
- Элемент 3
- Элемент 8
- Элемент 9
- Элемент 10
- Элемент 4
- Элемент 5
- Элемент 2
Что мне нужно сделать сейчас: для заданного списка идентификаторов вернуть все элементы с предоставленными идентификаторами и их потомками (независимо от того, сколько уровней).Например, если я получу массив с [2, 3]
, то результат будет [2, 3, 7, 8, 9, 10]
.
. Я создал функцию для создания древовидной структуры на основе массива:
public function createTree($parent = 0)
{
// This returns all the direct children of $parent
$elements = filterByParent($parent);
$categories = [];
$i = 0;
foreach ($elements as $element) {
$categories[$i] = $element;
$categories[$i]['children'] = createTree($element['id']);
$i++;
}
return $categories;
}
Но я не знаю, как действовать сейчас.
Любая помощь будет признательна.
Заранее спасибо!