it-swarm.com.ru

Проверьте, является ли число нечетным или четным

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

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

237
user1022585

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

$number % 2 == 0

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

Пример:

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

Результат:

Это даже

525
Tim Cooper

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

n & 1

например:

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

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

$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
22
Aaron W.

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

$check = 9;

или:

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

или же:

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

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

8
Tarik
(bool)($number & 1)

или же 

(bool)(~ $number & 1)
7
Olegs

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

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

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

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

$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
5
Ruben Coolen

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

$number = 4;
if(is_int($number/2))
{
   echo("Integer");
}
else
{
   echo("Not Integer");
}
2
David S.

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
Loek Bergman

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

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

Итак, что же это делает, он запрашивает утверждение, которое мы делаем по сути, $ i нечетно, в зависимости от того, будет ли его true или false решать, что будет возвращено. Возвращаемое значение заполняет нашу переменную $ 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++;
}

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

1
Chris

Этот код проверяет, является ли число нечетным или четным в 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>";
}
1
Narendra Chauhan
//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://en.wikipedia.org/wiki/Parity_of_zero

1
sumit

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

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