Я просмотрел интернет и не совсем нашел то, что искал. У меня есть плоский массив с каждым элементом, содержащим «id» и «parent_id». Каждый элемент будет иметь ОДНОГО родителя, но может иметь несколько дочерних элементов. Если parent_id = 0, он считается элементом корневого уровня. Я пытаюсь превратить мой плоский массив в дерево. Другие образцы, которые я обнаружил, только копируют элемент в родительский, но оригинал все еще существует.
EDIT
Каждый элемент начального массива читается из отдельного файла XML. Сам файл будет иметь значение «0» для parent_id, если у него нет родителя. Ключи на самом деле являются строками.
Прошу прощения за путаницу ранее. Надеюсь, это более понятно:
/ EDIT
Мой начальный массив:
Array
(
[_319_] => Array
(
[id] => 0
[parent_id] => 0
)
[_320_] => Array
(
[id] => _320_
[parent_id] => 0
)
[_321_] => Array
(
[id] => _321_
[parent_id] => _320_
)
[_322_] => Array
(
[id] => _322_
[parent_id] => _321_
)
[_323_] => Array
(
[id] => _323_
[parent_id] => 0
)
[_324_] => Array
(
[id] => _324_
[parent_id] => _323_
)
[_325_] => Array
(
[id] => _325_
[parent_id] => _320_
)
)
Получается массив после дерева:
Array
(
[_319_] => Array
(
[id] => _319_
[parent_id] => 0
)
[_320_] => Array
(
[id] => _320_
[parent_id] => 0
[children] => Array
(
[_321_] => Array
(
[id] => _321_
[parent_id] => _320_
[children] => Array
(
[_322_] => Array
(
[id] => _322_
[parent_id] => _321_
)
)
)
[_325_] => Array
(
[id] => _325_
[parent_id] => _320_
)
)
[_323_] => Array
(
[id] => _323_
[parent_id] => 0
[children] => Array
(
[_324_] => Array
(
[id] => _324_
[parent_id] => _323_
)
)
)
Любая помощь / руководство с благодарностью!
Какой-то код, который у меня есть:
function buildTree(array &$elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = $this->buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}