mod es el término genérico abreviado para 'módulo', también conocido como aritmética modular
Marc B
1
Más información aquí incluyendo: Para determinar impar o par, es más rápido y más eficiente usar el operador bit a bit :&$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
ashleedawg
Respuestas:
558
Tenías razón al pensar que el mod era un buen lugar para comenzar. Aquí hay una expresión que devolverá verdadero si $numberes par, falso si impar:
Si usa esto en bucles o grandes cantidades, es posible que desee considerar la comprobación de bits sugerida por Arius2038, que es muy rápida. El bitcheck es mi método preferido para verificaciones pares / impares.
Martijn
Funciona bien, pero me pregunto cuál es la lógica detrás de esto. ¿Por qué se da un valor verdadero si "10 == 0"?
snlan
La lógica es que cualquier número par es divisible por 2 sin resto. Si usó $ number% 10, y su $ number era 20, devolvería verdadero, pero no si su $ number era 22. Podría usar $ number% 10 si intentaba encontrar cada décimo elemento en un bucle, por ejemplo .
Crdunst
1
@Tim, si 5% 2 = 1. La lógica es 2 * 2 + 1 = 5. ¿Cómo obtener el 2 en php?
Hendry Tanaka
1
@Hendry: ¿qué preguntas exactamente? ¿Cómo obtener el cociente para una división como un número entero, o ...? Si eso es lo que quieres decir, solo necesitas poner el resultado (); piso (5/2) = 2
Definitivamente, esta sería la forma más rápida cuando se usan enteros en un lenguaje como C, por un amplio margen. ¿Alguien ha hecho puntos de referencia para determinar si esto también es cierto para PHP?
thomasrutter
1
Probablemente sea la forma más rápida, si el motor PHP estaba bien codificado.
Rolf
Yo diría que esta es la forma más rápida y directa. Perfecto.
Creo que es un operador bit a bit, a menos que sepa lo que está haciendo con esa fantasía, evitaría esta sintaxis.
danhere
1
Tengo que admirar la sintaxis, las cosas que funcionan sin saber por qué, te recuerdan lo pequeños que somos en el mundo de la física, las matemáticas y, bueno, solo agrega una fila en el número 1, no en el 2 ...
Jonas Lundman
Utilizo bastante operadores bit a bit en JS. Por ejemplo en if (~string.indexOf("@")) {}lugar de if (string.indexOf("@") !== -1) {}. Prefiero ver que las condiciones den como resultado un simple verdadero o falso. Pero sí, puede ser un poco confuso para las personas que no están familiarizadas con esta sintaxis.
Martin James
7
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 en 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}
A Downvoter: ¿Puedo saber por qué votaron en contra?
Subin
44
Es muy caro, en comparación con otros métodos.
grantwparks
@grantwparks Bueno, la diferencia entre usar isset y mod es de solo 0.5007 segundos. Pero, array_search es muy costoso.
Subin
2
@grantwparks He actualizado el código para incluir in_arrayqué operador de mod late a veces.
Subin
1
Interesante forma de pensar sin embargo. Básicamente es la versión decimal de $num & 1:). También puede hacerlo hexadecimal: array (0, 2, 4, 6, 8, A, C, E, F): D.
Matthijs Wessels
5
Hice un poco de prueba, y descubrí que entre mod is_inty &-operator, mod es el más rápido, seguido de cerca por & -operator.
is_intes casi 4 veces más lento que el mod.
en mi servidor (5.4.4 / cli / no opcache / i7) el "&" es aproximadamente un 10% más rápido que el mod (probado en una matriz con valores enteros aleatorios)
Pawel Dubiel
3
Todos los números pares divididos por 2 darán como resultado un número entero
//for numbers n [0,1,2,3,4....]if((n+2)%2==1){//odd}else{//even}
Cero es un número par. En otras palabras, su paridad, la calidad de un número entero par o impar, es par. La forma más simple de demostrar que 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 los números pares: 0 es divisible por 2, 0 está rodeado en ambos lados por números impares, 0 es la suma de un entero (0) consigo mismo, y un conjunto de 0 objetos se puede dividir en dos conjuntos iguales. de http://en.wikipedia.org/wiki/Parity_of_zero
PHP está convirtiendo nulo y una cadena vacía automáticamente a cero. Eso también sucede con el módulo. Por lo tanto, el código
$number %2==0or!($number &1)
con valor $ número = '' o $ número = resultado nulo en verdadero. Lo pruebo para ello algo más extendido:
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>";}}Theprintis there for testing purposes, hence in practice it becomes:function testEven($pArg){if(is_int($pArg)===true){return $pArg%2;}returnfalse;}
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 que yo (y otros programadores) sepan que la prueba es como se esperaba.
<!DOCTYPE html><html><head><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><title>Check Even Or Odd Number Without Use Condition And Loop Statement.</title></head><body><h4>Check Even Or Odd Number Without Use Condition And Loop Statement.</h4><table><tr><th>Enter A Number :</th><td><inputtype="text"name="num_even_odd"id="num_even_odd"placeholder="Enter Only Number"></td></tr><tr><th>Your Answer Is :</th><tdid="ans_even_odd"style="font-size:15px;color:gray;font-weight:900;"></td></tr><tr><td><inputtype="button"name="btn_even_odd"id="btn_even_odd"value="submit"></td></tr></table></body></html>
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, consulta la afirmación que estamos haciendo, en esencia, $ i es impar, dependiendo de si es verdadero o falso decidirá qué se devuelve. El valor devuelto llena nuestra variable $ row_pos
Mi uso de esto es colocarlo dentro del bucle foreach, justo antes de que lo necesite. Esto hace que sea un revestimiento muy eficiente para darme los nombres de clase apropiados, esto se debe a que ya tengo un contador para que los id usen luego en el programa. Este es un breve ejemplo de cómo usaré esta parte.
<divclass='row-{$row_pos}'> random data <div>
Esto me da clases pares e impares en cada fila para que pueda usar la clase correcta y eliminar mis resultados impresos en la página.
El ejemplo completo de lo que uso nota que la identificación tiene el contador aplicado y la clase tiene mi resultado impar / par aplicado:
Advertencia, por algunas razones, esta condición no se evalúa como VERDADERA en una declaración de bucle for , como se muestra a continuación:
Al comienzo de cada iteración, expr2se evalúa. Si se evalúa como VERDADERO, el ciclo continúa y se ejecutan las declaraciones anidadas. Si se evalúa como FALSO, la ejecución del ciclo finaliza.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Respuestas:
Tenías razón al pensar que el mod era un buen lugar para comenzar. Aquí hay una expresión que devolverá verdadero si
$number
es par, falso si impar:Funciona para cada valor entero de PHP , vea también Operadores aritméticos PHP .
Ejemplo:
Salida:
fuente
Otra opción es una simple comprobación de bits.
por ejemplo:
fuente
Si usando el mod
fuente
Si bien todas las respuestas son buenas y correctas, la solución simple en una línea es:
ya sea:
o:
funciona muy bien
fuente
o
fuente
if (~string.indexOf("@")) {}
lugar deif (string.indexOf("@") !== -1) {}
. Prefiero ver que las condiciones den como resultado un simple verdadero o falso. Pero sí, puede ser un poco confuso para las personas que no están familiarizadas con esta sintaxis.Otra opción es verificar si el último dígito es un número par:
O para hacerlo más rápido, use en
isset()
lugar dearray_search
:O para hacerlo más rápido ( latidos
mod operator
a veces ):Aquí está la prueba de tiempo como prueba de mis hallazgos.
fuente
in_array
qué operador de mod late a veces.$num & 1
:). También puede hacerlo hexadecimal: array (0, 2, 4, 6, 8, A, C, E, F): D.Hice un poco de prueba, y descubrí que entre mod
is_int
y&
-operator, mod es el más rápido, seguido de cerca por & -operator.is_int
es casi 4 veces más lento que el mod.Usé el siguiente código para fines de prueba:
Los resultados que obtuve fueron bastante consistentes. Aquí hay una muestra:
fuente
Todos los números pares divididos por 2 darán como resultado un número entero
fuente
Cero es un número par. En otras palabras, su paridad, la calidad de un número entero par o impar, es par. La forma más simple de demostrar que 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 los números pares: 0 es divisible por 2, 0 está rodeado en ambos lados por números impares, 0 es la suma de un entero (0) consigo mismo, y un conjunto de 0 objetos se puede dividir en dos conjuntos iguales. de http://en.wikipedia.org/wiki/Parity_of_zero
fuente
Este código verifica si el número es impar o par en PHP. En el ejemplo
$a
es2
y obtienes un número par. Si necesita impar, cambie el$a
valorfuente
PHP está convirtiendo nulo y una cadena vacía automáticamente a cero. Eso también sucede con el módulo. Por lo tanto, el código
con valor $ número = '' o $ número = resultado nulo en verdadero. Lo pruebo para ello algo más extendido:
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 que yo (y otros programadores) sepan que la prueba es como se esperaba.
fuente
Este trabajo para mi ..!
fuente
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.
Entonces, ¿qué hace esto? Bueno, consulta la afirmación que estamos haciendo, en esencia, $ i es impar, dependiendo de si es verdadero o falso decidirá qué se devuelve. El valor devuelto llena nuestra variable $ row_pos
Mi uso de esto es colocarlo dentro del bucle foreach, justo antes de que lo necesite. Esto hace que sea un revestimiento muy eficiente para darme los nombres de clase apropiados, esto se debe a que ya tengo un contador para que los id usen luego en el programa. Este es un breve ejemplo de cómo usaré esta parte.
Esto me da clases pares e impares en cada fila para que pueda usar la clase correcta y eliminar mis resultados impresos en la página.
El ejemplo completo de lo que uso nota que la identificación tiene el contador aplicado y la clase tiene mi resultado impar / par aplicado:
En resumen, esto me da una forma muy simple de crear una bonita mesa.
fuente
Prueba esto,
fuente
Advertencia, por algunas razones, esta condición no se evalúa como VERDADERA en una declaración de bucle for , como se muestra a continuación:
Esto NO funciona:
Esto NO funciona:
Esto NO funciona:
Esto funciona bien :
fuente
fuente
fuente
Pruebe este con el campo #Input
fuente