He buscado en Internet y todavía no he encontrado lo que estoy buscando. Tengo una matriz plana con cada elemento que contiene un 'id' y un 'parent_id'. Cada elemento solo tendrá UN padre, pero puede tener varios hijos. Si parent_id = 0, se considera un elemento de nivel de raíz. Estoy tratando de obtener mi matriz plana en un árbol. Las otras muestras que he encontrado solo copian el elemento al padre, pero el original aún existe.Construir un árbol desde una matriz plana en PHP
EDITAR
Cada elemento de la matriz de partida se lee de un archivo XML independiente. El archivo en sí tendrá '0' como el valor para parent_id si no tiene un padre. Las claves son en realidad cadenas.
Disculpa la confusión anterior. Espero que esto es más claro:
/EDIT
Mi matriz de partida:
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_ ) )
La matriz resultante después se hace el árbol:
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_ ) ) )
Cualquier ayuda/orientación es ¡apreciado enormemente!
Parte del código que tengo hasta ahora:
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; }
I'm confused. ¿Simplemente nos pides que escribamos el código que toma tu primer arreglo y escupemos lo que tienes en el segundo conjunto? – MetalFrog
Sí ... ¿cuál es la pregunta aquí? –
En resumen, supongo que sí. He visto varios otros ejemplos aquí en stackoverflow y en otros blogs/foros. Pero cuando los he probado, no funcionan. – DSkinner