Занятно.
Попарился сегодня ещё над развитием своего варианта, и таки получилось то что и хотел.
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.