php, если число нечетное или четное

Каков самый простой самый простой способ узнать, является ли число / переменная нечетной или даже PHP? Это как-то связано с модом?

Я пробовал несколько скриптов, но .. Google не доставляет в настоящий момент.

Вы были правы, думая, что мода – хорошее место для начала. Вот выражение, которое вернет true, если $number is even, false, если нечетно:

 $number % 2 == 0 

Работает для каждого целочисленного значения PHP , см. Также Арифметические операторы PHP .

Пример:

 $number = 20; if ($number % 2 == 0) { print "It's even"; } 

Вывод:

Это даже

Другим вариантом является простая проверка бит.

 n & 1 

например:

 if ( $num & 1 ) { //odd } else { //even } 

Да, используя мод

 $even = ($num % 2 == 0); $odd = ($num % 2 != 0); 

Другой вариант – проверить, является ли последняя цифра четным числом:

 $value = "1024";// A Number $even = array(0, 2, 4, 6, 8); if(in_array(substr($value, -1),$even)){ // Even Number }else{ // Odd Number } 

Или, чтобы сделать это быстрее, используйте isset() вместо array_search :

 $value = "1024";// A Number $even = array(0 => 1, 2 => 1, 4 => 1, 6 => 1, 8 => 1); if(isset($even[substr($value, -1)]){ // Even Number }else{ // Odd Number } 

Или сделать это быстрее ( иногда проигрывает mod operator ):

 $even = array(0, 2, 4, 6, 8); if(in_array(substr($number, -1),$even)){ // Even Number }else{ // Odd Number } 

Вот тест времени как доказательство моих результатов.

 (bool)($number & 1) 

или

 (bool)(~ $number & 1) 

Я немного is_int и обнаружил, что между mod, is_int и & -оператором мода является самым быстрым, за которым следует & -оператор. is_int почти в 4 раза медленнее, чем мода.

Для целей тестирования я использовал следующий код:

 $number = 13; $before = microtime(true); for ($i=0; $i<100000; $i++) { $test = ($number%2?true:false); } $after = microtime(true); echo $after-$before." seconds mod<br>"; $before = microtime(true); for ($i=0; $i<100000; $i++) { $test = (!is_int($number/2)?true:false); } $after = microtime(true); echo $after-$before." seconds is_int<br>"; $before = microtime(true); for ($i=0; $i<100000; $i++) { $test = ($number&1?true:false); } $after = microtime(true); echo $after-$before." seconds & operator<br>"; 

Результаты, полученные мной, были довольно последовательными. Вот пример:

 0.041879177093506 seconds mod 0.15969395637512 seconds is_int 0.044223070144653 seconds & operator 

Хотя все ответы хороши и правильны, простое решение в одной строке:

 $check = 9; 

или:

 echo ($check & 1 ? 'Odd' : 'Even'); 

или:

 echo ($check % 2 ? 'Odd' : 'Even'); 

работает очень хорошо.

Все четные числа, деленные на 2, приведут к целому числу

 $number = 4; if(is_int($number/2)) { echo("Integer"); } else { echo("Not Integer"); } 
 //for numbers n [0,1,2,3,4....] if((n+2)%2==1) { //odd }else { //even } 

Ноль – четное число. Другими словами, его четность – качество целого числа четное или нечетное – четное. Простейший способ доказать равенство нулю – это проверить, что он соответствует определению «четный»: он представляет собой целое число, кратное 2, в частности 0 × 2. В результате нуль имеет все свойства, характеризующие четные числа: 0 делится на 2, 0 окружен с обеих сторон нечетными числами, 0 – сумма целого числа (0) с самим собой, а набор из 0 объектов можно разбить на два равных множества. от http://ru.wikipedia.org/wiki/Parity_of_zero

Я делаю предположение, что есть счетчик уже на месте. в $ i, который увеличивается в конце цикла. Это работает для меня, используя сокращенный запрос.

 $row_pos = ($i & 1) ? 'odd' : 'even'; 

Итак, что это делает, ну, он запрашивает заявление, которое мы делаем, в сущности, $ i является нечетным, в зависимости от того, будет ли его истинное или ложное определять, что возвращается. Возвращаемое значение заполняет нашу переменную $ row_pos

Мое использование этого заключается в том, чтобы поместить его внутри цикла foreach, прямо перед тем, как он мне понадобится. Это делает его очень эффективным одним лайнером, чтобы дать мне соответствующие имена классов, потому что у меня уже есть счетчик для того, чтобы идентификатор использовал позже в программе. Это краткий пример того, как я буду использовать эту часть.

 <div class='row-{$row_pos}'> random data <div> 

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

Полный пример того, что я использую, отмечает, что идентификатор имеет счетчик, примененный к нему, и класс использует мой нечетный / равномерный результат:

 $i=0; foreach ($a as $k => $v) { $row_pos = ($i & 1) ? 'odd' : 'even'; echo "<div id='A{$i}' class='row-{$row_pos}'>{$v['f_name']} {$v['l_name']} - {$v['amount']} - {$v['date']}</div>\n"; $i++; } 

в общем, это дает мне очень простой способ создать симпатичную таблицу.

Этот код проверяет, является ли число нечетным или даже на PHP. В примере $a равно 2 и вы получите четное число. Если вам нужно нечетное значение, измените значение $a

 $a=2; if($a %2 == 0){ echo "<h3>This Number is <b>$a</b> Even</h3>"; }else{ echo "<h3>This Number is <b>$a</b> Odd</h3>"; } 

PHP преобразует нуль и пустую строку автоматически в нуль. Это происходит и с модулем. Следовательно, код

 $number % 2 == 0 or !($number & 1) 

со значением $ number = '' или $ number = null возвращает true. Я проверяю его на несколько больше:

 function testEven($pArg){ if(is_int($pArg) === true){ $p = ($pArg % 2); if($p== 0){ print "The input '".$pArg."' is even.<br>"; }else{ print "The input '".$pArg."' is odd.<br>"; } }else{ print "The input '".$pArg."' is not a number.<br>"; } } The print is there for testing purposes, hence in practice it becomes: function testEven($pArg){ if(is_int($pArg)=== true){ return $pArg%2; } return false; } 

Эта функция возвращает 1 для любого нечетного числа, 0 для любого четного числа и false, если оно не является числом. Я всегда пишу === true или === false, чтобы позволить себе (и другим программистам) знать, что тест имеет значение.

 $before = microtime(true); $n = 1000; $numbers = range(1,$n); $cube_numbers = array_map('cube',$numbers); function cube($n){ $msg ='even'; if($n%2 !=0){ $msg = 'odd'; } return "The Number is $n is ".$msg; } foreach($cube_numbers as $cube){ echo $cube . "<br/>"; } $after = microtime(true); echo $after-$before. 'seconds'; 

Попробуй это,

 $number = 10; switch ($number%2) { case 0: echo "It's even"; break; default: echo "It's odd"; }