Che bell'esecizietto! Adorabile la ricorsione, mi sono divertito a risolverlo (anche se c'è voluto più tempo a mettere i doppi apici intorno all'array recordset che a scrivere il codice):
Il codice prescinde dalla profondità delle categorie.
Codice PHP:
<?php
//diciamo che esegui una query select * from menu order by struttura
$recordset=array(
"elettrodomestici",
"elettrodomestici>cucine>elettriche",
"elettrodomestici>cucine>gas",
"forni",
"forni>da incasso",
"forni>da incasso>a gas",
"forni>da incasso>elettrici",
"forni>esterni",
"forni>esterni>a gas",
"forni>esterni>elettrici",
"televisori",
"televisori>LED",
"televisori>LED>32 pollici",
"televisori>LED>40 pollici",
"televisori>plasma",
"televisori>plasma>32 pollici",
"televisori>plasma>40 pollici"
);
function addToMenu(&$menu,$voci){
if(!is_null($voce = array_pop($voci))){
if(!isset($menu[$voce]))
$menu[$voce]=array();
addToMenu($menu[$voce],$voci);
}
}
function showMenu($menu,$indent){
foreach ($menu as $key => $value) {
printf("%{$indent}s","");
printf($key."
");
if(is_array($menu[$key]))
showMenu($menu[$key],$indent+4);
}
}
$menu=array();
foreach ($recordset as $value) {//qui sostituisci con mysql_fetch_array
$voci = array_reverse(explode(">", $value));
addToMenu($menu,$voci);
}
echo "<pre>";
showMenu($menu,0);
echo "</pre>";
?>
l'output prodotto:
codice:
elettrodomestici
cucine
elettriche
gas
forni
da incasso
a gas
elettrici
esterni
a gas
elettrici
televisori
LED
32 pollici
40 pollici
plasma
32 pollici
40 pollici