Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
Zdravím,
mám setříděné dvourozměrné pole, př: $pole[] = array("Automobily","Osobní","Autorádia"); $pole[] = array("Automobily","Osobní","Bouračky"); $pole[] = array("Automobily","Užitkové","Dodávky"); $pole[] = array("Hudba & film","DVD"); (přeskočit duplicitní nadřazené položky) <ul> <li>Automobily <ul> <li>Osobní <ul> <li>Autorádia</li> <li>Bouračky</li> </ul> </li> <li>Užitkové <ul> <li>Dodávky</li> </ul> </li> </ul> </li> <li>Hudba & film <ul> <li>DVD</li> </ul> </li> </ul> Možná to jde úplně jednoduše, nevíte někdo jak na to? |
||
joe Profil |
Jednoduše by se to mělo dát vypsat rekurzí, hádám, že jsem ti ale asi moc nepomohl. Každopádně osobně bych formát pole trochu pozměnil, protože by se mi s tím lépe pracovalo, a to konkrétně na (pokud jsem se někde nespletl):
$pole[] = array("Automobily" => array("Osobní" => array("Autorádia", "Bouračky"), "Užitkové" => array("Dodávky"))); $pole[] = array("Hudba & film","DVD"); |
||
Ugo Profil |
tohle zrovna spolehlivě a rozšiřovatelně nevidím, nebylo by možné připravit si lepší pole?
$pole['automobily']['osobni'][]="autoradia"; $pole['automobily']['osobni'][]="bouračky"; Edit:ha byl jsem přeskočen :) |
||
nethor Profil |
#4 · Zasláno: 30. 1. 2012, 13:42:08
Tohle tak nějak chodí, ale má to kosmetické vady:
$cesta[] = array("Automobily","Osobní","Autorádia"); $cesta[] = array("Automobily","Osobní","Bouračky"); $cesta[] = array("Automobily","Užitkové","Dodávky"); $cesta[] = array("Hudba & film","DVD"); $last = array(); foreach ($cesta as $ind => $kat) { foreach ($kat as $uroven => $polozka) { if($last[$uroven] != $polozka) { // předchozí úroveň se liší if($ulend = $open - $uroven ) $echo[] = str_repeat("</ul>", $ulend); $open = $uroven; $echo[] = str_repeat("\t", $uroven)."<ul>"; $open ++; $echo[] = str_repeat("\t", $uroven+1)."<li>$polozka" ; // když se liší, položka se vypíše vždy } $last[$uroven] = $polozka; } } $echo[] = str_repeat("</ul>", $open) ; // uzavřem zbytek if (is_array($echo)) echo implode("\n", $echo); |
||
Časová prodleva: 12 let
|
0