PHP:¿Cómo puedo armar un árbol de categorías?

De Foros del Web

Cómo puedo armar un árbol de categorías al estilo: categoria1

-categoria1.1

--categoria1.1.1

--categoria1.1.2

categoria2

-categoria2.1


Respuesta:

Primero necesitamos una tabla en mysql como ésta:


Código:

CREATE TABLE `categorias` (
  `codigo` int(11) unsigned NOT NULL auto_increment,
  `nombre` varchar(255) default NULL,
  `padre` int(11) unsigned NOT NULL default '0',
  PRIMARY KEY  (`codigo`)
) TYPE=MyISAM;
 
 
insert into `categorias` values 
 
(1,'categoria1',0),
 
(2,'categoria1.1',1),
 
(3,'categoria1.1.1',2),
 
(4,'categoria1.1.2',2),
 
(5,'categoria2',0),
 
(6,'categoria2.1',5);

Luego, con esta función podemos listarla:

Código PHP:

function arbol( $padre, $nivel ){
    $nivel++;
    $r = mysql_query( "SELECT * FROM categorias where padre ='$padre' " );
    while( $rs = mysql_fetch_assoc( $r ) ){
        echo str_pad($rs["nombre"], strlen($rs["nombre"])+($nivel-1), "-", STR_PAD_LEFT). "<br />";
        arbol( $rs["codigo"], $nivel );
    } mysql_free_result( $r );
}
$nivel = 0;
arbol( 0, $nivel );  

--nicolaspar 14 May 2007

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales