Suponiendo que tienes en la base de datos un menú así;
Código PHP:
Ver original array('id'=>1,'seccion'=>'Administracion','pertenece'=>0), array('id'=>2,'seccion'=>'ventas','pertenece'=>1), array('id'=>3,'seccion'=>'config','pertenece'=>2), array('id'=>4,'seccion'=>'otro','pertenece'=>3), array('id'=>5,'seccion'=>'mas','pertenece'=>4), array('id'=>6,'seccion'=>'again','pertenece'=>5), array('id'=>7,'seccion'=>'dos','pertenece'=>0), array('id'=>8,'seccion'=>'tres','pertenece'=>0), array('id'=>9,'seccion'=>'cuatro','pertenece'=>0), array('id'=>10,'seccion'=>'cinco','pertenece'=>0), array('id'=>11,'seccion'=>'nuevo','pertenece'=>3), array('id'=>12,'seccion'=>'viejo','pertenece'=>3) );
Donde 'id' es el id del registro en la tabla, 'sección' es el nombre del menú o nivel, y 'pertenece' es el id del menú o submenú al que pertenece el registro actual (el id 1 sólo puede pertenecer al id 0)
Con una función similar a esta:
Código PHP:
Ver originalfunction asigna($menu,$id,$seccion,$pertenece){
return array('menu___id'=>$id,'menu_name'=>$seccion); if(isset($menu['menu___id']) and
$menu['menu___id']==$pertenece) $menu['Submenus'][]=array('menu___id'=>$id,'menu_name'=>$seccion); else{
if(!isset($menu['Submenus'])) $menu['Submenus']=array('menu___id'=>$id,'menu_name'=>$seccion); else
$menu['Submenus']=asigna($menu['Submenus'],$id,$seccion,$pertenece);
}
}
return $menu;
}
Puedes crear el menú con la estructura que mencionas, recorriendo los registros de tu tabla (en este caso usé un arreglo y recorro con un for, pero se adaptaría a un while con una tabla)
Código PHP:
Ver originalforeach($secciones as $i =>$m)
$menu=asigna($menu,$m['id'],$m['seccion'],$m['pertenece']);
Edito: por cierto, desde luego, este método carga todo el árbol del menú en memoria.