Проверьте, является ли число нечетным или четным - PullRequest
245 голосов
/ 01 ноября 2011

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

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

Ответы [ 16 ]

539 голосов
/ 01 ноября 2011

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

$number % 2 == 0

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

Пример:

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

Выход:

Это даже

186 голосов
/ 06 февраля 2012

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

n & 1

, например:

if ( $num & 1 ) {
  //odd
} else {
  //even
}
23 голосов
/ 01 ноября 2011

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

$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
8 голосов
/ 09 мая 2016

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

$check = 9;

либо:

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

или

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

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

7 голосов
/ 10 октября 2013

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

$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
}

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

7 голосов
/ 16 января 2013
(bool)($number & 1)

или

(bool)(~ $number & 1)
5 голосов
/ 22 августа 2013

Я провел небольшое тестирование и обнаружил, что между модом, 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
2 голосов
/ 01 июня 2015

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, чтобы позволить себе (и другим программистам) знать, что тест соответствует назначению.

2 голосов
/ 05 июля 2012

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

$number = 4;
if(is_int($number/2))
{
   echo("Integer");
}
else
{
   echo("Not Integer");
}
1 голос
/ 12 января 2015

Этот код проверяет, является ли число нечетным или четным в 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>";
}
...