prueba php si el número es impar o incluso

¿Cuál es la forma más simple y básica de averiguar si un número / variable es impar o incluso en PHP? ¿Tiene algo que ver con mod?

He intentado algunas secuencias de comandos pero … google no está entregando en este momento.

Tenías razón al pensar que mod era un buen lugar para comenzar. Aquí hay una expresión que devolverá verdadero si $number es par, falso si impar:

 $number % 2 == 0 

Funciona para cada valor entero de PHP , ver también Operadores Aritméticos PHP .

Ejemplo:

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

Salida:

Es incluso

Otra opción es una simple verificación de bits.

 n & 1 

por ejemplo:

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

Si usando la mod

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

Otra opción es verificar si el último dígito es un número par:

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

O para hacerlo más rápido, use isset() lugar de 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 } 

O para hacerlo más rápido ( a veces el mod operator beats ):

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

Aquí está la prueba del tiempo como prueba de mis hallazgos.

 (bool)($number & 1) 

o

 (bool)(~ $number & 1) 

Hice is_int pruebas y descubrí que entre mod, is_int y & -operator, mod es el más rápido, seguido de cerca por & operador. is_int es casi 4 veces más lento que mod.

Usé el siguiente código para fines de prueba:

 $number = 13; $before = microtime(true); for ($i=0; $i<100000; $i++) { $test = ($number%2?true:false); } $after = microtime(true); echo $after-$before." seconds mod
"; $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
"; $before = microtime(true); for ($i=0; $i<100000; $i++) { $test = ($number&1?true:false); } $after = microtime(true); echo $after-$before." seconds & operator
";

Los resultados que obtuve fueron bastante consistentes. Aquí hay una muestra:

 0.041879177093506 seconds mod 0.15969395637512 seconds is_int 0.044223070144653 seconds & operator 

Si bien todas las respuestas son buenas y correctas, la solución simple en una línea es:

 $check = 9; 

ya sea:

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

o:

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

funciona muy bien

Todos los números pares divididos por 2 darán como resultado un número entero

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

Zero es un número par. En otras palabras, su paridad, la cualidad de un entero par o impar, es par. La forma más simple de probar que el cero es par es comprobar que se ajusta a la definición de “par”: es un múltiplo entero de 2, específicamente 0 × 2. Como resultado, cero comparte todas las propiedades que caracterizan a los números pares: 0 es divisible por 2, 0 está rodeado por ambos lados por números impares, 0 es la sum de un entero (0) consigo mismo, y un conjunto de 0 objetos puede dividirse en dos conjuntos iguales. de http://en.wikipedia.org/wiki/Parity_of_zero

Estoy asumiendo que ya hay un contador en su lugar. en $ i que se incrementa al final de un ciclo, esto funciona para mí usando una consulta abreviada.

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

Entonces, ¿qué hace esto? Bueno, cuestiona la afirmación que estamos haciendo en esencia $ i es impar, dependiendo de si es verdadero o falso lo que se devuelve. El valor devuelto rellena nuestra variable $ row_pos

Mi uso de esto es colocarlo dentro del ciclo foreach, justo antes de que lo necesite. Esto lo hace un trazador de líneas muy eficiente para darme los nombres de clase apropiados, esto es porque ya tengo un contador para que los identificadores hagan uso de más tarde en el progtwig. Este es un breve ejemplo de cómo usaré esta parte.

 
random data

Esto me da clases impares y pares en cada fila para que pueda usar la clase correcta y alinear mis resultados impresos en la página.

El ejemplo completo de lo que uso nota que el ID tiene el contador aplicado y la clase tiene mi resultado impar / par aplicado a él:

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

en resumen, esto me da una manera muy simple de crear una bonita tabla.

Este código verifica si el número es impar o incluso en PHP. En el ejemplo $a es 2 y usted obtiene el número par. Si necesita impar, cambie el valor $a

 $a=2; if($a %2 == 0){ echo "

This Number is $a Even

"; }else{ echo "

This Number is $a Odd

"; }

PHP está convirtiendo null y una cadena vacía automáticamente en cero. Eso pasa con Modulo también. Por lo tanto, el código

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

con valor $ number = ” o $ number = null resultado en verdadero. Lo pruebo por eso algo más extendido:

 function testEven($pArg){ if(is_int($pArg) === true){ $p = ($pArg % 2); if($p== 0){ print "The input '".$pArg."' is even.
"; }else{ print "The input '".$pArg."' is odd.
"; } }else{ print "The input '".$pArg."' is not a number.
"; } } 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; }

Esta función devuelve 1 para cualquier número impar, 0 para cualquier número par y falso cuando no es un número. Siempre escribo === verdadero o === falso para permitirme a mí mismo (y a otros progtwigdores) saber que la prueba es como se pretendía.

Prueba esto,

 $number = 10; switch ($number%2) { case 0: echo "It's even"; break; default: echo "It's odd"; } 
 $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 . "
"; } $after = microtime(true); echo $after-$before. 'seconds';