Показать сообщение отдельно
Старый 13.10.2005, 21:01     # 9
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 код:
function menu($id

    global 
$m
    
$j=$m;
    static 
$i=0

    foreach(
$j as $key=>$value
    { 
        if (
$value==$id
        { 
            echo 
"$i уровень - $key<br>"
            
$i++; 
            
menu ($key); 
            
$i--; 
        } 
    } 

Но вот такое дело, объяснения которому я так и не нашел. Функция практически не изменилась, просто все $m[0] заменил просто на $m. Т.е. избавился от двумерности массива.
Но если влоб сделать такую замену - скрипт перестает работать как надо.
При обходе foreach($m as $key=>$value) при определенном условии вызывается эта же функция (рекурсия вроде называется), в которой так же идет обход foreach($m as $key=>$value).
Так вот, выход из рекурсивно вызванной функции происходит при невыполнении условия if и завершении foreach. И после этого выхода из функции счетчик foreach не восстанавливает своего значения, а указывает туда, где остановился в выполненной только что функции, т.е. в конец. А это не есть гуд.
Я решил просто добавлением после global $m определения $j=$m и в foreach использую уже $j. Тогда при возвращении из функции указатель указывает на тот элемет массива, на котором остановился перед её вызовом.
Не понятным мне остается, почему такая разница получается при использовании $m[0] и $m.

Последний раз редактировалось SergoZD; 13.10.2005 в 21:07.
SergoZD вне форума