|
|
|
| Всем добрый день!
Есть таблица 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']);
}
}
|
| |
|
|
|
|
|
|
|
для: Front
(05.09.2008 в 15:05)
| | Ваша функция ничего не возвращает. Вообще.
В ней даже оператора return нет.
Соответственно ни о каких результатах функции говорить не приходится.
Она лишь чего-то выводит в поток браузера. Это не результат. Это побочный эффект вызова. | |
|
|
|
|
|
|
|
для: Trianon
(05.09.2008 в 15:14)
| | Так а как можно вернуть результат функции, я понимаю что это делается операторо return. Но какую переменную из функции ему нужно вернуть? | |
|
|
|
|
|
|
|
для: Front
(05.09.2008 в 15:57)
| | какую вернуть это вам виднее...
наверное | |
|
|
|
|
|
|
|
для: Valick
(05.09.2008 в 16:11)
| | $list ему не нужен. | |
|
|
|
|
|
|
|
для: Trianon
(05.09.2008 в 16:16)
| | Хм... и то верно.
Непонятный код... зачем собирать массив если из него берётся только первое значение? | |
|
|
|
|
|
|
|
для: Front
(05.09.2008 в 15:57)
| | Создайте переменную, приписывайте к ней очередной элемент в цикле.
Её и верните в конце функции. | |
|
|
|
|
|
|
|
для: 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
(08.09.2008 в 10:31)
| | Никто не знает как? | |
|
|
|
|
|
|
|
для: Front
(09.09.2008 в 12:38)
| | Наверное, всех ставит в тупик, что после return Вы еще ждёте выполнения какого-то кода.
Кстати, не понятно зачем Вы вообще ввели переменную $lev - не видно никакого смысла. | |
|
|
|
|
|
|
|
для: Front
(08.09.2008 в 10:31)
| | У Вас три цикла. Зачем? Одним не обойтись?
Я не говорю уже про то, что можно обойтись без рекурсии вообще (если интересно, как именно - недавно была тема про удаление поддерева. Там были приведены примеры нерекурсивной работы с деревьями. Только запрос удаления придется убрать :) | |
|
|
|