Показать сообщение отдельно
Старый 30.09.2005, 18:15     # 1
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
Построение многоуровеневого меню на php

Задача такова. Для простоты, есть некий массив, например такой:
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("");

?>
Посоветуйте, как бы алгоритм изменить до требуемого, уже третий день пытаюсь придумать, да чё-т видно мозгов не хватает


Зы. недавно где-то видел тему с похожим названием, но чё-т не смог найти...

Последний раз редактировалось SergoZD; 30.09.2005 в 18:19.
SergoZD вне форума