Crear estructuras de árbol a partir de matrices en PHP
Tengo una matriz como esta:
array(
array(id => 7, parent_id => 0, name => Activos Corrientes)
array(id => 8, parent_id => 0, name => Activos Fijos)
array(id => 18, parent_id => 7, name => Activos)
array(id => 38, parent_id => 18, name => Cuentas por Cobrar)
array(id => 38, parent_id => 18, name => Inventario)
array(id => 39, parent_id => 0, name => Costo de Inventario de Tierra)
array(id => 40, parent_id => 38, name => Jazz Cash)
array(id => 41, parent_id => 39, name => Anticipo a Proveedores)
)
Ahora necesito una forma eficiente de convertir esto en una estructura de árbol como esta.
array(
array(id => 7, parent_id => 0, name => Activos Corrientes, nivel=>0)
array(id => 8, parent_id => 0, name => Activos Fijos, nivel => )
array(id => 18, parent_id => 7, name => Activos, nivel => 1)
array(id => 38, parent_id => 18, name => Inventario, nivel => 2)
array(id => 39, parent_id => 0, name => Costo de Inventario de Tierra, nivel => 0)
array(id => 40, parent_id => 38, name => Jazz Cash, nivel => 3)
array(id => 41, parent_id => 39, name => Anticipo a Proveedores, nivel => 1)
)
No necesito agregarlos a la izquierda o a la derecha, solo necesito los niveles simples que pasaré a jQgrid.
davy.ai
Para convertir el arreglo dado en una estructura de árbol, podemos utilizar una función recursiva que tome el arreglo original y el ID del padre (inicialmente establecido en 0 para el padre principal). La función iterará a través del arreglo y para cada elemento, si su ID padre coincide con el ID de padre actual, entonces agregará el elemento como hijo de su padre y llamará a la función recursivamente con el nuevo ID de padre como el ID actual del elemento.
Para realizar un seguimiento del nivel de cada elemento, podemos agregar una clave de “nivel” a cada elemento e incrementarla en uno cada vez que se llama la función recursiva.
Aquí está el código de la función recursiva:
Luego podemos llamar a esta función con el arreglo dado para obtener la estructura de árbol deseada:
La variable resultante
$tree
contendrá la estructura de árbol deseada. Luego podemos pasar esto a jQgrid junto con los demás datos necesarios.