Recursividad en array multidimensional
Hola, estoy intentando crear un array multidimensional a partir de una base de datos. El array tiene que ser del tipo:
$padre[0]['nivel_1'][0]['nivel_2'][0]['nombre']='nieto'.
Y quiero que, a partir de una consulta que me devuelve todos los padres (raiz principal: los distingo porque tienen el valor 'id_padre=0' en la base de datos) llamar a una función recursiva que vaya creando el array. Me estoy volviendo loco y no hay manera de que me salga. Lo único que he conseguido es un array del tipo:
$padre[0]['nivel_1']=hijo'
$padre[0]['nivel_2']='nieto'.
Pero así pierdo la estructura del árbol porque no sé de qué hijo es el nieto.
En fin... A alguien se le ocurre algo? Pongo debajo el trozo de código...
$padresAux=$mysql_obj->select_bd("SELECT * FROM sections WHERE id_padre=0 ORDER BY p_os");
for($nI=0;$nI<count($padresAux);$nI++){
$padres=&$padresAux;
rellena_niveles($padres,1);
}
function rellena_niveles($actual,$indice){
global $padres,$mysql_obj,$niveles;
$niveles=$indice;
for($nD=0;$nD<count($actual);$nD++){
$hijos=$mysql_obj->select_bd("SELECT * FROM sections WHERE id_padre=".$actual[$nD]['ID']." ORDER BY p_os");
if(count($hijos)<1){
// $indice+1;
return 1;
}
else{
$padres['nivel_'.$indice]=$hijos;
rellena_niveles($actual,$indice+1);
}
}
}
$padre[0]['nivel_1'][0]['nivel_2'][0]['nombre']='nieto'.
Y quiero que, a partir de una consulta que me devuelve todos los padres (raiz principal: los distingo porque tienen el valor 'id_padre=0' en la base de datos) llamar a una función recursiva que vaya creando el array. Me estoy volviendo loco y no hay manera de que me salga. Lo único que he conseguido es un array del tipo:
$padre[0]['nivel_1']=hijo'
$padre[0]['nivel_2']='nieto'.
Pero así pierdo la estructura del árbol porque no sé de qué hijo es el nieto.
En fin... A alguien se le ocurre algo? Pongo debajo el trozo de código...
$padresAux=$mysql_obj->select_bd("SELECT * FROM sections WHERE id_padre=0 ORDER BY p_os");
for($nI=0;$nI<count($padresAux);$nI++){
$padres=&$padresAux;
rellena_niveles($padres,1);
}
function rellena_niveles($actual,$indice){
global $padres,$mysql_obj,$niveles;
$niveles=$indice;
for($nD=0;$nD<count($actual);$nD++){
$hijos=$mysql_obj->select_bd("SELECT * FROM sections WHERE id_padre=".$actual[$nD]['ID']." ORDER BY p_os");
if(count($hijos)<1){
// $indice+1;
return 1;
}
else{
$padres['nivel_'.$indice]=$hijos;
rellena_niveles($actual,$indice+1);
}
}
}