Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/01/2011, 09:20
Avatar de repara2
repara2
 
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Crear menu arbol a partir de tabla recursiva

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>";


?>