Forum Webscript.Ru
Программирование => PHP => Тема начата: DimoninG2 от 15 Июля 2006, 23:55:30
-
Ребята, странная проблема.
Есть функция, которая не может возвратить значение (возвращается всегда "").
Вот код:
function get_inside($id, $ins){
$q = mysql_query ("SELECT * FROM CAT WHERE ID=\'$id\';");
if (!$q){
echo "error";
exit(0);
}
$str = mysql_fetch_array ($q);
if ($str[\'parent\'] <= \'0\'){
/*ошибка тут!*/ return $ins;
}
else{
$ins++;
get_inside ($str[\'parent\'], $ins);
}
}
function get_inside_and_print($id){
echo get_inside (13, 0)."
";
}
На алгоритм не смотрите - он правильный. Дело в том, что если вместо return $ins; поставить echo $ins; то все работает (значение выводится). Ощущение, что return не может передать данные в теле if...
В чем дело и как лечить?
-
Как я понял, сдесь рекурсия и при $str[\'parent\'] >0 он заходит дальше, что ты делаеш с получиным значением? думаю тебе надо изменить так:
return get_inside ($str[\'parent\'], $ins);
-
return get_inside ($str[\'parent\'], $ins);
Но мне не нужно, чтобы после того как произойдет ретурн функция вызывалась еще раз...
Насчет полученного значения.
У меня есть меню (для сайта), которое составляется динамически. В каждый пункт меню можно неограниченно вложить еще пункты. В каждый под-пункт еще и так далее - то есть меню ни где не ограниченно.
Так вот этой рекурсивной функцией я нахожу степень вложенности переданного id меню. То есть, когда достигается корень (самый верхний уровень), счетчик $ins равен степени вложенности и его-то мне и нужно возвратить.
А уже по степени вложенности определяется оформление текста для вывода на страницу.
Если есть вариант использования глобальной переменной - расскажите как, а то не выходит че-то.
-
Но мне не нужно, чтобы после того как произойдет ретурн функция вызывалась еще раз...
я то понял как работает этот алгоритм и для чего, ты всетаки поставь перед той строчкой return и посмотри результат :)
Если есть вариант использования глобальной переменной - расскажите как, а то не выходит че-то.
$max=0;
function get_inside($id,$ins){
global $max;
...
..
$max=$ins // за место return $ins;
...
}
P.S. Почитай, что такое рекурсия и как она работает.