Tohle je již validní (vyzkoušel jsem):
function makeList($array){
if (is_array($array)) {
$pridej_ul=false;
foreach ($array as $key => $subArray){
if (isset($subArray["url"])) {
$pridej_ul=true;
$output .= '<li>';
$output .= '<a href="'.$subArray["url"].'">'.$subArray["name"].'</a>';
$output .= makeList($subArray);
$output .= '</li>';
}
else $output .= makeList($subArray);
}
if ($pridej_ul) $output = '<ul>'.$output.'</ul>';
}
else $output = '';
return $output;
}
Pokud chceš ještě ty složené odkazy, pak je jednou z možností vkládat části odkazu do rekurzívní funkce jako argument.
Přenechávám za cvičení, neboť musím jít běhat s psíkem, než se vyrojí magoři s petardami.