ando bloqueado para crear un menú recursivo utilizando una consulta con los siguientes datos:
Código:
//ejemplo de la primer fila regresada por la consulta sql
Array ( [id] => 12
[year] => 2012
[user_id] => 95
[fecha] => 1340395675
[ger_id] => 2
[ad_id] => 4
[area_especifica] => ghghb
[cambio_id] => 5
[prop_id] => 1
[motivo] => bgb
[antecedentes] => bghb
[objetivos] => bghg
[desc] => bgh
[beneficios] => bgh
[bases] => bgh
[ar_id] => 1
[ar_info] => bg
[afect_amb] =>
[afect_info] => bgh
[partes_id] => 2
[apd_id] => 6
[capac] =>
[capac_info] => bgh
[com_riesgos] =>
[com_info] => bgh
[status] => EN REVISION
[tipo_doc] => 0
[area] => 3 area
[cambio] => trés bien )
el menú que quiero hacer quedaría así:
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<body>
<ul id="grupos">
<li>year
<ul>
<li>area 1
<ul>
<li>status 1
<ul>
<li>cambio 1
<ul>
<li>id 1</li>
<li>id 2</li>
<li>id 3</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>area 2
<ul>
<li>status 2
<ul>
<li>cambio 2
<ul>
<li>id 4</li>
<li>id 5</li>
<li>id 6</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>status 3
<ul>
<li>cambio 3
<ul>
<li>id 7</li>
<li>id 8</li>
<li>id 9</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>year 2
<ul>
<li>area
<ul>
<li>status
<ul>
<li>cambio
<ul>
<li>id 1</li>
<li>id 2</li>
<li>id 3</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</body>
</html>
como ven, los resultados se agruparían por: Año->area->status->cambio->record .
Qué algoritmo me sugieren para crear esta lista ? considerando que:
- los records siempre estarán a 5 niveles
- el record siempre tiene "varios" parent_id... que vendrían siendo: Año->area->status->cambio, de ahí depende como se agrupa en la lista
la verdad no se me ocurre nada... lo único que había hecho fue:
Código:
$cYear = $cArea = $cStatus = $cCambio = "" ;
$pYear = $pArea = $pStatus = $pCambio = "" ;
$html .= '<ul id="group">' ;
$first = true ;
$x = 0 ;
foreach ($result as $d) {
$html.="<li>".print_r($d)."</li>" ;
/*if ($first) {
$cYear = $d['year'] ;
$html.='<li><a href="#" onclick="return false;">'.$d['year']."</a><ul>\n" ;
}
$pYear = $d['year'] ;
$pArea = $d['area'] ;
if ($pArea != $cArea) {
$cArea = $d['area'] ;
$html .= '<li><a href="#" onclick="return false;">'.$d['area']."</a><ul>\n" ;
}
$pStatus = $d['status'] ;
if ($pStatus != $cStatus) {
$cStatus = $d['status'] ;
$html .= '<li><a href="#" onclick="return false;">'.$d['status']."</a><ul>\n" ;
}
$pCambio = $d['cambio'] ;
if ($pCambio != $cCambio) {
$cCambio = $d['cambio'] ;
$html .= '<li><a href="#" onclick="return false;">'.$d['cambio']."</a><ul>\n" ;
}
$html .= "<li>CD-".$d['id']."/".$d['year']."</li>\n" ;
$first = FALSE ;
//$x++ ;
//if ($x==4) break ;*/
}
$html .= '</ul>' ;
pero como ven es un desmadre que no tiene nada de bonito....
cualquier sugerencia es agradecida.
gracias