Aunque la recursividad no es mi fuerte, te paso una idea. Asegúrate de crear y completar la tabla de pruebas correctamente. Modificar y adaptar a gusto! 1 saludo
Código PHP:
<?php
/**
* Table: temp
Column Information
FieldTypeComment
idint(11)
descripcionvarchar(128)
dependenciaint(11)
Index Information
IndexesColumnsIndex_Type
PRIMARYidUnique
DDL Information
create table
CREATE TABLE 'temp' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'descripcion' varchar(128) DEFAULT NULL,
'dependencia' int(11) DEFAULT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
CREATE TABLE 'temp' (
'id' DOUBLE ,
'descripcion' VARCHAR (384),
'dependencia' DOUBLE
);
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('1','General','0');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('2','Reservas','0');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('3','Facturacion','0');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('4','Reservas_Online','2');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('5','Reservas_Offline','2');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('6','Cobros','3');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('7','Pagos','3');
*/
mysql_connect("localhost","user","password");
mysql_select_db("bd217754");
/**
* Crea menu recursivamente a partir de un elemento de nivel superior
*
* @param int $xElement
* @return array
* @author barcoavenus.blog.com
*/
function getMenu($xElement){
$xResponse = array();
$sql = "SELECT * FROM temp WHERE dependencia = '$xElement';";
if(!$query = mysql_query($sql)) $xResponse = array("Error en la select: ".mysql_error());
while($fetch = mysql_fetch_assoc($query)){
if($fetch['dependencia'])
if(array_key_exists($fetch['dependencia'], $xResponse)){
$xResponse[$fetch['dependencia']][$fetch['id']]['descripcion'] = $fetch['descripcion'];
$xResponse[$fetch['dependencia']][$fetch['id']]['id'] = $fetch['id'];
$xResponse[$fetch['dependencia']][$fetch['id']]['dependencias'] = (count(getMenu($fetch['id']))?getMenu($fetch['id']):"Ninguna");
}
else{
$xResponse[$fetch['id']]['descripcion'] = $fetch['descripcion'];
$xResponse[$fetch['id']]['id'] = $fetch['id'];
$xResponse[$fetch['id']]['dependencias'] = (count(getMenu($fetch['id']))?getMenu($fetch['id']):"Ninguna");
}
}
mysql_free_result($query);
return $xResponse;
}
echo "<pre>";
print_r($test = getMenu(3));
echo "</pre>";
?>