Я просмотрел интернет и не совсем нашел то, что искал. У меня есть плоский массив с каждым элементом, содержащим "id" и "parent_id". Каждый элемент будет иметь только один родительский элемент, но может иметь несколько дочерних элементов. Если parent_id = 0, он считается элементом уровня корня. Я пытаюсь получить свой плоский массив в дерево. Другие образцы, которые я нашел, только копируют элемент в родительский, но оригинал все еще существует.
ИЗМЕНИТЬ
Каждый элемент стартового массива считывается из отдельного файла 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; }