Есть данный алгоритм угадывания числа, которое рандомно загадал комп. Цикл не прерывается break`ом, при нахождении нужного числа. PHP: <?php error_reporting(E_ALL); $compChoice = rand(0, 100); $myChoice = 50; $count = 25; function Check ($comp, $my) { if ($comp === $my) { return false; } else if ($my > $comp) { return 'Меньше'; } else if ($my < $comp) { return 'Больше'; } } while(1) { $result = Check($compChoice, $myChoice); if ($result === false) { break; }else if ($result === 'Меньше') { $myChoice -= $count; }else if ($result === 'Больше') { $myChoice += $count; } $count = ceil($count / 2); echo $result.'; myChoice:'.$myChoice.'; Count'.$count.'; CompChoice:'.$compChoice.'<br>'; } ?> Но если мы меняем цикл на данную конструкцию, то прерывание работает нормально. PHP: while(1){ $result = Check($compChoice, $myChoice); if ($result === false) { break; }else if ($result === 'Меньше') { $myChoice--; }else if ($result === 'Больше') { $myChoice++; } } Пробовал на JS, работает как надо. В чем проблема?
На выходе, если деление не нацело, вы получаете float значение и сравниваете его с int значением, соответственно условие: не будет истинным. PHP: var_dump(1 === (float)1);