Почему функция выдает false
1.
Удаленный (07.10.2009 / 21:42)
Должна дать true.
function chess_peshka($r,$d,$gn,$vn,$gv,$vv){
$n=$gn.$vn;
$v=$gv.$vv;
$r=str_split($r);
if(empty($d)){
if($gn=='7' && $gv=='5'){
if($r[$n-20]=='0' && $r[$n-10]=='0' && $v==($n-20))
{return true;}
else{return 2;}
}
if($n==($v-10)){
if($r[$v]=='0')
{return true;}
else{return 3;}
}
if($n==($v-9)){
if(eregi("[a-f]", $r[$v]))
{return 4;}
else{return true;}
}
if($n==($v-11)){
if(eregi("[a-f]", $r[$v]))
{return 5;}
else{return true;}
}
}else{
if($gn=='2' && $gv=='4'){
if($r[$n+20]=='0' && $r[$n+10]=='0' && $v==($n+20))
{return true;}
else{return false;}
}
if($n==($v+10)){
if($r[$v]=='0')
{return true;}
else{return false;}
}
if($n==($v+9)){
if(!eregi("[^g-l]", $r[$v]))
{return false;}
else{return true;}
}
if($n==($v+11)){
if(!eregi("[g-l]", $r[$v]))
{return false;}
else{return true;}
}
}
return false;
}
2.
Lugaro (07.10.2009 / 21:49)
на последнии строки смотри
return false;
}
P.S пиши код нормально, глаза режет
3.
Удаленный (07.10.2009 / 21:58)
$r='00000000000adadadad00adadadad000000000000000000000000000000000000000000adadadad00adadadad00000000000';
$d='';
$gn=7;
$vn=1;
$gv=6;
$vv=1;
4.
Lugaro (07.10.2009 / 22:02)
Ы ты про что?
Убери предпоследнюю строку и твои глаза узреют счастье (:
5.
Удаленный (07.10.2009 / 22:40)
Разници никакой всеравно пусто а должно быть 1
6.
Александр (07.10.2009 / 23:05)
как никакой false и пустота это разница))
7.
Удаленный (07.10.2009 / 23:21)
Ну я проверял так if (chess_peshka($r,$d,$gn,$vn,$gv,$vv)){echo 1;}else{echo 'false';}
8.
Удаленный (08.10.2009 / 02:42)
Убрал и всеравно.
9.
Удаленный (08.10.2009 / 02:44)
Да насколько я знаю функция выводит первое возвращение.
10.
SD (08.10.2009 / 15:12)
потому че:
$n=$gn.$vn;
$v=$gv.$vv; - строковые переменные,
а тут - if($n==($v-10))
ты пытаешься произвести вычитание числа из строки.
пиши так:
$n=(int)($gn.$vn);
$v=(int)($gv.$vv);
Да и плюс условие, удовлетворяюшее if($n==($v-10)){, с переменными $gn=7 $vn=1; $gv=6; $vv=1;, есть только в блоке функции, где $d равно не пустой строке
11.
Удаленный (08.10.2009 / 19:56)
Просидел над ней полтора часа и выяснил што насамом деле проблема заключается когда значение unset($d);
if($n==($v-10))
заменил на
if($n==($v+10))
а при значении $d=1;
if($n==($v+10))
заменил на
if($n==($v-10))
глупая ошибка немного запутался.
#11 твои идеи я учту
нащет (int) я проверяю перед функцией при выдачи етих переменых а вот за $d=''; спасибо заменил на if($d!==1)
и в приеме поставил if($d!==1){unset($d);}
12.
Удаленный (08.10.2009 / 19:57)
спасибо большое всем за помощь.
13.
Удаленный (08.10.2009 / 20:01)
11 извини но я уже ставил тибе плюс.
14.
SD (09.10.2009 / 10:19)
12, просто ТОЧКА - соединяет части строк, даже если исходные данные в переменных были числом, они автоматически переводятся в строку, поэтому и нужно преобразовывать строку в число, что и делает инт
15.
Удаленный (09.10.2009 / 18:17)
Ладно заменим но и так работает.
URL:
https://visavi.net/topics/1488