Задача такова. Для простоты, есть некий массив, например такой:
PHP код:
$m["o"]="";
$m["p"]="";
$m["q"]="o";
$m["r"]="o";
$m["s"]="q";
$m["t"]="";
$m["g"]="t";
$m["y"]="o";
$m["f"]="t";
$m["z"]="j";
$m["h"]="j";
$m["j"]="t";
$m["e"]="z";
В нем в качестве ключа стоит текущий id пункта, а значение - id родительского пункта меню. Пустая строка означает что это корневой элемент.
Нужно на php сделать вывод этого массива в древовидном виде, для данного примера в таком:
Код:
o
_q
__s
_r
_y
p
t
_g
_f
_j
__z
___e
__h
Пока смог дойти лишь до варианта, что они выводятся в нужном порядке, но не могу придумать, как бы сделать разделение уровней.
Да и сам код по моему не слишком удачен (увеличение массива до двухмерного сдается мне не очень удачное решение)
Вот что пока получается:
PHP код:
<?php
function menu1($id)
{
global $m;
foreach($m[0] as $key=>$value)
{
if ($value==$id and $m[1][$key]==0)
{
echo "$key=$value<br>";
$m[1][$key]=1;
menu1 ($key);
}
}
}
$m[0]["o"]="";
$m[0]["p"]="";
$m[0]["q"]="o";
$m[0]["r"]="o";
$m[0]["s"]="q";
$m[0]["t"]="";
$m[0]["g"]="t";
$m[0]["y"]="o";
$m[0]["f"]="t";
$m[0]["z"]="j";
$m[0]["h"]="j";
$m[0]["j"]="t";
$m[0]["e"]="z";
menu1("");
?>
Посоветуйте, как бы алгоритм изменить до требуемого, уже третий день пытаюсь придумать, да чё-т видно мозгов не хватает
Зы. недавно где-то видел тему с похожим названием, но чё-т не смог найти...