Добрый вечер, Код (PHP): function Recursion($brand,$artid){ $query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical` FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($artid). "' AND `MfcName`='" .mysql_real_escape_string($brand). "' and (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ; $result = mysql_query($query); while($Row = mysql_fetch_array($result)) { if ((!in_array($Row['ArtCanonical'],$art[0]))&&(!in_array($Row['MfcNameCanonical'],$art[1]))){ $art[0][]=$Row['ArtCanonical']; $art[1][]=$Row['MfcNameCanonical']; Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);// } } return $art; } $mas=Recursion('oc47','knecht'); в браузере, в коде странички. Код (PHP): <html> <head></head> <body></body> </html> Почему такое поведение?Если убрать внутри рекурсии вызов самой себя, то нормуль отображается страница сайта. Почему? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
потому что скорее всего сервер падает статусом 500 и браузер показывает фейк-страницу чтоб было хоть что-то. где дебаг скрипта?
у меня так таковой ошибки не возникает...(именно 500 ). как устранить данную ошибку, у меня ошибка в рекурсии? а просто код. Код (PHP): <html> <head></head> <body></body> </html> Дебаг скрипта? где , в браузере? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
сделай какой нить вывод строки между этими строчками Код (PHP): $art[1][]=$Row['MfcNameCanonical']; // вот тут что то понятное для тебя (; Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);//
Код (PHP): $art[1][]=$Row['MfcNameCanonical']; echo $Row['MfcNameCanonical'].'-'.$Row['ArtCanonical']; Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);// ничего не выводит, почему-то... а если убрать Код (PHP): Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);// то выведет. Почему, не пойму.... даже объявляла $art глобальной, тоже не выводилось Код (PHP): global $art; $art[0][]=' ';$art[1][]=' '; $mas=Recursion('oc47','knecht'); PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
лог ошибок там случаем не гласит лимит рекурсии? вообще попробуйте сначала сделать вардамп текущего состояния функции и потом тут же сделайте выход.
если вы имеете ввиду лог сервера, куда пишут ошибки, то их попросто нет, именно тех ошибок на конкретной странице., где выполняется рекурсия. про вардамп переменной. а про вардамп текущего состояния функции мне не известно.
вероятнее всего, как мне кажется при второй рекурсии - база выдает пустые значения, и нужно условие на выход написать ((
Вторую рекурсию руками написала, повторила все , что написано было до вызова рекурсии(вызов рекурсии самой себя убрала)-нормально все выводит. Возможно-третья , четвертая рекурсия пустые... У каждой пары артикула и бренда есть аналоги бренд и артикул, у последних свои аналоги. -вот что я хочу сделать.
Код (PHP): function Recursion($brand,$artid,$r){ echo 'beg '.var_dump($art).'</br>'; if ($r<=1){ $db = mysql_connect("localhost", "det", "") or die("Could not connect: ".mysql_error()); //Установка кодировки UTF8 mysql_query("set names utf8"); //Выбор базы данных mysql_select_db("det"); $query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical` FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($artid). "' AND `MfcName`='" .mysql_real_escape_string($brand). "' and (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ; echo $query.'</br>'; $result = mysql_query($query) or trigger_error(mysql_error()." in ".$query); while($Row = mysql_fetch_array($result)) { if ((!in_array($Row['ArtCanonical'],$art[0]))&&(!in_array($Row['MfcNameCanonical'],$art[1]))){ $art[0][$i]=$Row['ArtCanonical']; $art[1][$i]=$Row['MfcNameCanonical']; echo $r.' '.$Row['MfcNameCanonical'].'-'.$Row['ArtCanonical'].'</br>'; echo var_dump($art).'</br>'; /*$query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical` FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($Row['ArtCanonical']). "' AND `MfcName`='" .mysql_real_escape_string($Row['MfcNameCanonical']). "' and (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ; $res = mysql_query($query) or trigger_error(mysql_error()." in ".$query); while($Row1 = mysql_fetch_array($res)) { if ((!in_array($Row1['ArtCanonical'],$art[0]))&&(!in_array($Row1['MfcNameCanonical'],$art[1]))){ $art[0][]=$Row1['ArtCanonical']; $art[1][]=$Row1['MfcNameCanonical']; echo '2 '.$Row['MfcNameCanonical'].'-'.$Row['ArtCanonical'].'</br>'; } }*/ Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical'],$r+1); } } } return $art; } Почему у меня обнуляется массив $art, то есть на выходе не все значения $art.Делала $art глобальным, не помогло....
я пробовала сделать выход из рекурсии, не получается... может, я где-то туплю Код (PHP): if (mysql_num_rows($result)==0) return $art; PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
на сколько я понимаю текущую вариацию функции, то это часть строки опять же будет истинной, раз Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical'],$r+1); (; пример рекурсии Код (PHP): function recurs( $iValue = 0 ) { if( 1 > $iValue ) return 0; return $iValue + recurs( $iValue - 1 ); }
p@R@dox 55RU, спасибо за сообщение, но это не то... выход из рекурсии, если запрос в базу возвращает ничего....- как-бы идет продолжение действии ... например, ищем аналоги артикул и бренд в базе, если они есть,то записываем в массив аналог артикул и аналог бренд, и вызываем по артикулу и бренду аналога рекурсию.Если нет, то продолжим записывать аналог и бренд... Код (PHP): function Recursion($brand,$artid,$art){ $db = mysql_connect("localhost", "det", "") or die("Could not connect: ".mysql_error()); //Установка кодировки UTF8 mysql_query("set names utf8"); //Выбор базы данных mysql_select_db("det"); $query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical`,`Desc` FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($artid). "' AND `MfcName`='" .mysql_real_escape_string($brand). "' and (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ; $result = mysql_query($query) or trigger_error(mysql_error()." in ".$query); if (mysql_num_rows($result)>0){ while($Row = mysql_fetch_array($result)) { if ((!in_array($Row['ArtCanonical'],$art[0]))&&(!in_array($Row['MfcNameCanonical'],$art[1]))){ $art[0][]=$Row['ArtCanonical']; $art[1][]=$Row['MfcNameCanonical']; $art=Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical'],$r+1,$art);// } } }else {return $art;} return $art; } вроде все заработало, но мне кажется не все правильно....(не все аналоги выводятся) PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]