Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Возвращаемое значение функции!
 
 автор: Front   (05.09.2008 в 15:05)   письмо автору
 
 

Всем добрый день!
Есть таблица struct_code со столбцами struct_code и struct_parent.
Функция возвращает после рекурсивного обхода значения struct_code. Возможно ли записать эти значения в тектовую переменную. Я пытался делать implobe после:

echo $row['struct_code'].","; 


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

Мне нужно использовать результаты функции в другом запросе, где присутствует IN (результат функции).
Подскажите как или return значение функции или вставить вызов самой функции в запрос?
Заранее спасибо

function recurs($lev, $cat) 
   {
     $list = array(); 
     $query = " SELECT struct_code FROM structs where struct_parent = $cat order by struct_code"; 
     if(($res = mssql_query($query)) != 0) 
       while(($row = mssql_fetch_assoc($res)) != 0) 
         $list[] = $row;
     mssql_free_result($res); 
     
     foreach($list as $row) 
     { 
       echo $row['struct_code']; 
       recurs($lev+1, $row['struct_code']);    
       
     } 
   }

  Ответить  
 
 автор: Trianon   (05.09.2008 в 15:14)   письмо автору
 
   для: Front   (05.09.2008 в 15:05)
 

Ваша функция ничего не возвращает. Вообще.
В ней даже оператора return нет.
Соответственно ни о каких результатах функции говорить не приходится.

Она лишь чего-то выводит в поток браузера. Это не результат. Это побочный эффект вызова.

  Ответить  
 
 автор: Front   (05.09.2008 в 15:57)   письмо автору
 
   для: Trianon   (05.09.2008 в 15:14)
 

Так а как можно вернуть результат функции, я понимаю что это делается операторо return. Но какую переменную из функции ему нужно вернуть?

  Ответить  
 
 автор: Valick   (05.09.2008 в 16:11)   письмо автору
 
   для: Front   (05.09.2008 в 15:57)
 

какую вернуть это вам виднее...
return $list;

наверное

  Ответить  
 
 автор: Trianon   (05.09.2008 в 16:16)   письмо автору
 
   для: Valick   (05.09.2008 в 16:11)
 

$list ему не нужен.

  Ответить  
 
 автор: Valick   (05.09.2008 в 17:00)   письмо автору
 
   для: Trianon   (05.09.2008 в 16:16)
 

Хм... и то верно.
Непонятный код... зачем собирать массив если из него берётся только первое значение?

  Ответить  
 
 автор: Trianon   (05.09.2008 в 17:38)   письмо автору
 
   для: Front   (05.09.2008 в 15:57)
 

Создайте переменную, приписывайте к ней очередной элемент в цикле.
Её и верните в конце функции.

  Ответить  
 
 автор: Front   (08.09.2008 в 10:31)   письмо автору
 
   для: Trianon   (05.09.2008 в 17:38)
 

Записываю в цикле значения переменных в массив, делаю implobe, но в результате возвращается только одно значение - первое и все...
Подскажите, что не так:

function recurs($lev, $cat) 
   {
       
     $list = array(); 
     $query = "SELECT struct_code FROM structs where struct_parent = '$cat'"; 
     if(($res = mssql_query($query)) != 0) 
       while(($row = mssql_fetch_assoc($res)) != 0) 
         $list[] = $row;
     mssql_free_result($res); 
     //$i=0;
     foreach($list as $row) 
     { 
       $pro[] = $row['struct_code']; 
       
       foreach ($pro as $val)
       {
            $str[] = $val;    
            $comma_separated = implode(",", $str);
       }
       return $comma_separated;
       recurs($lev+1, $row['struct_code']);    
       //$i++;
       /*
       if ($i == 8)
       {
           break;
       }
       */
     }      
   }


Спасибо

  Ответить  
 
 автор: Front   (09.09.2008 в 12:38)   письмо автору
 
   для: Front   (08.09.2008 в 10:31)
 

Никто не знает как?

  Ответить  
 
 автор: BinLaden   (09.09.2008 в 19:23)   письмо автору
 
   для: Front   (09.09.2008 в 12:38)
 

Наверное, всех ставит в тупик, что после return Вы еще ждёте выполнения какого-то кода.

Кстати, не понятно зачем Вы вообще ввели переменную $lev - не видно никакого смысла.

  Ответить  
 
 автор: Trianon   (09.09.2008 в 19:39)   письмо автору
 
   для: Front   (08.09.2008 в 10:31)
 

У Вас три цикла. Зачем? Одним не обойтись?


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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования