[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: return
Страницы: 1, 2
Slays
вот смотрите, имеется у меня функция

function getRow($id,$auxid,$gpId){
$sql = "SELECT parent FROM `struct` WHERE `id`='".$auxid."' LIMIT 1";
$result = mysql_query($sql) or die('Данной страницы не найдено');
$num = mysql_num_rows($result);
if($num>0){
$row = mysql_fetch_assoc($result);

if($row['parent'] == $gpId){
return $id; // не отдает $id
}
else
getRow($id,$row['parent'],$gpId);
}
}


$id = getRow('82','82','1');


Написано криво и не все, можно даже в суть не вникать, просто объясните почему return $id мне не отдает, если заменить на echo $id, то видно что $id определяется правильно, только мне ее из функции передать надо

user posted image

_____________
если помог, не скупись на карму =)
linker
Потому что условие $row['parent'] == $gpId не выполняется smile.gif А если серьезно, то
if(!$num) return null;
if($row['parent'] == $gpId)
{
return $id; // не отдает $id
}
else
return
getRow($id,$row['parent'],$gpId);
Ваще даже так
return ($row['parent'] == $gpId) ? $id : getRow($id,$row['parent'],$gpId);


_____________
Gear Framework
Gear Framework на Github
demonichka
А еще одну скобку закрыть?


function getRow($id,$auxid,$gpId){
$sql = "SELECT parent FROM `struct` WHERE `id`='".$auxid."' LIMIT 1";
$result = mysql_query($sql) or die('Данной страницы не найдено');
$num = mysql_num_rows($result);
if($num>0){
row = mysql_fetch_assoc($result);

if($row['parent'] == $gpId){
return $id; // не отдает $id
} else
getRow($id,$row['parent'],$gpId);
}
}
}

$id = getRow('82','82','1');
linker
demonichka
Тут все нормально со скобками.

_____________
Gear Framework
Gear Framework на Github
Slays
linker
как не выполняется ) echo $id выводится =) А вот с тернарным ща попробую, правда выглядит он подозрительно ))

demonichka
со скобками все ок у меня, у else их нет вообще и не надо =)

_____________
если помог, не скупись на карму =)
Slays
оуу linker крутой, спасибо ))

user posted image

_____________
если помог, не скупись на карму =)
demonichka
Да, сорри. С елсе протупил.
Slays
все таки понять не могу, почему


function myfun(){


//... sql
while($row = mysql_fetch_assoc($res)){

if($row['gets'] == $gets){
echo $row['id'];
}
}

return;
}


Мне показывает что $row['id'] = 34, т.е. находит все верно !!!

а в return он эту переменную не отдает


function myfun(){

//... sql
while($row = mysql_fetch_assoc($res)){

if($row['gets'] == $gets){
return $row['id'];
}
}
}


таже проблема в шапке темы, ее мы обошли, но почему так происходит вообще, переменная не пустая, то условие точно выполняется, значит return $row['id']; мне вернуть должен значение, а нифига
user posted image


вариант


while($row = mysql_fetch_assoc($res)){
return (!empty($row['gets']) && $row['gets'] == $gets) ? $row['id'] : myfun();
}


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


_____________
если помог, не скупись на карму =)
kirik
Slays
Проверь данные по каждой итерации. Например выводи сравниваемые значения и еще какую-нибудь отладочную информацию.
Например:
function myfun(){

//... sql
while($row = mysql_fetch_assoc($res)){
echo $row['gets'] . '==' . $gets;
if($row['gets'] == $gets){
echo $row['id'];
return $row['id'];
}
}
}

увидишь что не так.
Slays
   
// $msql - простая обертка для sql
// $id - элемент в иерархии, у которого ищем родителя
// $gets - параметр элемента, которого ищем
// нам нужен id первого не пустого элемента по иерархии со значением $gets


function nextParent($msql,$id,$gets){

// находим чилдренов элемента
$sql = "SELECT `id`,`gets` FROM `struct` WHERE `parent` = '".$id."'";
$res = $msql->sql($sql);

// проверяем, если gets пустой, то делаем рекурсию со следующим id
while($row = mysql_fetch_assoc($res)){
if(empty($row['gets'])){
nextParent($msql, $row['id'],$gets);
}

echo $row['gets'].' = '.$gets.'<br/>';
// если нашли, выводим его id
if($row['gets'] == $gets){
echo 'Событие прошло: '.$row['id'].'<br/>';
return $row['id'];
}
}
}



echo 'Значание: '.nextParent($msql,'8','gen');


Результат:
Harpoon = gen
Sormat = gen
KEW = gen
= gen
gen = gen
Событие прошло: 34
= gen
Значание:

_____________
если помог, не скупись на карму =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.