Автор Тема: Функция не возвращает значение.  (Прочитано 3119 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DimoninG2

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ребята, странная проблема.

Есть функция, которая не может возвратить значение (возвращается всегда "").

Вот код:


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...

В чем дело и как лечить?

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Функция не возвращает значение.
« Ответ #1 : 16 Июля 2006, 02:00:35 »
Как я понял, сдесь рекурсия и при $str[\'parent\'] >0 он заходит дальше,  что ты делаеш с получиным значением? думаю тебе надо изменить так:
return get_inside ($str[\'parent\'], $ins);
Не все является тем чем кажется.

Оффлайн DimoninG2

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Функция не возвращает значение.
« Ответ #2 : 16 Июля 2006, 02:29:57 »
return get_inside ($str[\'parent\'], $ins);

Но мне не нужно, чтобы после того как произойдет ретурн функция вызывалась еще раз...

Насчет полученного значения.

У меня есть меню (для сайта), которое составляется динамически. В каждый пункт меню можно неограниченно вложить еще пункты. В каждый под-пункт еще и так далее - то есть меню ни где не ограниченно.

Так вот этой рекурсивной функцией я нахожу степень вложенности переданного id меню. То есть, когда достигается корень (самый верхний уровень), счетчик $ins равен степени вложенности и его-то мне и нужно возвратить.

А уже по степени вложенности определяется оформление текста для вывода на страницу.

Если есть вариант использования глобальной переменной - расскажите как, а то не выходит че-то.

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Функция не возвращает значение.
« Ответ #3 : 16 Июля 2006, 02:50:53 »
Цитировать
Но мне не нужно, чтобы после того как произойдет ретурн функция вызывалась еще раз...


я то понял как работает этот алгоритм и для чего, ты всетаки поставь перед той строчкой return и посмотри результат :)

Цитировать
Если есть вариант использования глобальной переменной - расскажите как, а то не выходит че-то.


$max=0;
 function get_inside($id,$ins){
  global $max;
 ...
..
      $max=$ins  // за место  return $ins;
...
}

P.S. Почитай, что такое рекурсия и как она работает.
« Последнее редактирование: 16 Июля 2006, 03:09:50 от Altaxar »
Не все является тем чем кажется.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28