Quelle est la manière la plus simple et la plus simple de savoir si un nombre / variable est impair ou même en PHP? Est-ce quelque chose à voir avec le mod?
J'ai essayé quelques scripts mais ... Google ne livre pas pour le moment.
Plus d'informations ici, y compris: Pour déterminer impair ou même il est plus rapide et plus efficace d'utiliser l' opérateur au niveau du bit :&$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
ashleedawg
Réponses:
558
Vous aviez raison de penser que le mod était un bon point de départ. Voici une expression qui retournera vrai si $numberest pair, faux si impair:
Si vous l'utilisez en boucles ou en grandes quantités, vous voudrez peut-être considérer le bitcheck suggéré par Arius2038, qui est très rapide. Le bitcheck est ma méthode préférée pour les contrôles pairs / impairs.
Martijn
Fonctionne bien, mais je me demande simplement quelle est la logique derrière cela? Pourquoi est-ce qu'une valeur de vrai est donnée si "10 == 0"?
snlan
La logique est que tout nombre pair est divisible par 2 sans reste. Si vous avez utilisé $ numéro% 10 et que votre numéro $ était 20, cela retournerait vrai, mais pas si votre numéro $ était 22. Vous pourriez utiliser $ numéro% 10 si vous essayiez de trouver chaque 10ème élément dans une boucle par exemple .
crdunst
1
@Tim, si 5% 2 = 1. Le logica est 2 * 2 + 1 = 5. Comment obtenir le 2 en php?
Hendry Tanaka
1
@Hendry - que demandez-vous exactement? Comment obtenir le quotient d'une division en nombre entier, ou ...? Si c'est ce que vous voulez dire, il vous suffit de plancher () le résultat; étage (5/2) = 2
Joey Sabey
196
Une autre option est une simple vérification des bits.
Ce serait certainement le moyen le plus rapide lorsque vous utilisez des entiers dans un langage comme C, par une grande marge. Quelqu'un a-t-il fait des benchmarks pour déterminer si cela est vrai aussi pour PHP?
thomasrutter
1
C'est probablement le moyen le plus rapide, si le moteur PHP était bien codé.
Rolf
Je dirais que c'est le moyen le plus rapide et le plus simple. Parfait.
Ceci est un opérateur au niveau du bit, je crois donc à moins que vous ne sachiez ce que vous faites avec cette fantaisie, j'éviterais cette syntaxe.
danhere
1
Je dois admirer la syntaxe, les choses qui fonctionnent sans savoir pourquoi, vous rappelle à quel point nous sommes petits dans le monde de la fysique, des mathématiques et, bien, il suffit d'ajouter une ligne sur le numéro 1, pas 2 ...
Jonas Lundman
J'utilise pas mal d'opérateurs bit à bit dans JS. Par exemple if (~string.indexOf("@")) {}au lieu de if (string.indexOf("@") !== -1) {}. Je préfère voir les conditions se traduire par un simple vrai ou faux. Mais oui, cela peut être un peu déroutant pour les personnes qui ne connaissent pas cette syntaxe.
Martin James
7
Une autre option consiste à vérifier si le dernier chiffre est un nombre pair:
$value ="1024";// A Number
$even = array(0,2,4,6,8);if(in_array(substr($value,-1),$even)){// Even Number}else{// Odd Number}
Ou pour le rendre plus rapide, utilisez isset()au lieu 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}
@grantwparks Eh bien, la différence entre l'utilisation de isset & mod n'est que de 0,5007 seconde. Mais, array_search est très cher.
Subin
2
@grantwparks J'ai mis à jour le code pour inclure celui in_arrayqui bat parfois l'opérateur mod.
Subin
1
Une façon de penser intéressante cependant. Il s'agit essentiellement de la version décimale de $num & 1:). Vous pouvez également le faire hexadécimal: tableau (0, 2, 4, 6, 8, A, C, E, F): D.
Matthijs Wessels
5
J'ai fait un peu de test et j'ai découvert qu'entre le mod is_intet l' &opérateur-, le mod est le plus rapide, suivi de près par l'opérateur &.
is_intest presque 4 fois plus lent que le mod.
sur mon serveur (5.4.4 / cli / no opcache / i7) le "&" est environ 10% plus rapide que le mod (testé sur un tableau avec des valeurs entières aléatoires)
Pawel Dubiel
3
Tous les nombres pairs divisés par 2 donneront un entier
//for numbers n [0,1,2,3,4....]if((n+2)%2==1){//odd}else{//even}
Zéro est un nombre pair. En d'autres termes, sa parité - la qualité d'un entier étant pair ou impair - est paire. Le moyen le plus simple de prouver que zéro est pair est de vérifier qu'il correspond à la définition de "pair": c'est un multiple entier de 2, spécifiquement 0 × 2. Par conséquent, zéro partage toutes les propriétés qui caractérisent les nombres pairs: 0 est divisible par 2, 0 est entouré des deux côtés par des nombres impairs, 0 est la somme d'un entier (0) avec lui-même, et un ensemble de 0 objets peut être divisé en deux ensembles égaux. depuis http://en.wikipedia.org/wiki/Parity_of_zero
Je ne comprends pas. Pourquoi (n + 2)% 2? Dans quels cas renvoie-t-il quelque chose de différent de n% 2?
Pierre-Olivier Vares
2
Ce code vérifie si le nombre est impair ou même en PHP. Dans l'exemple $aest 2et vous obtenez un nombre pair. Si vous avez besoin d'étranges, modifiez la $avaleur
$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 convertit automatiquement null et une chaîne vide en zéro. Cela se produit également avec modulo. À cet effet, le code
$number %2==0or!($number &1)
avec la valeur $ number = '' ou $ number = null, le résultat est true. Je le teste donc un peu plus étendu:
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;}
Cette fonction renvoie 1 pour tout nombre impair, 0 pour tout nombre pair et false lorsqu'il ne s'agit pas d'un nombre. J'écris toujours === true ou === false pour me faire savoir (et aux autres programmeurs) que le test est comme prévu.
<!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>
Je fais l'hypothèse qu'il y a déjà un compteur en place. dans $ i qui est incrémenté à la fin d'une boucle, cela fonctionne pour moi en utilisant une requête abrégée.
$row_pos =($i &1)?'odd':'even';
Alors, qu'est-ce que cela fait, eh bien, il interroge la déclaration que nous faisons essentiellement $ i est impair, selon que son vrai ou son faux décidera de ce qui sera retourné. La valeur renvoyée remplit notre variable $ row_pos
Mon utilisation de ceci est de le placer à l'intérieur de la boucle foreach, juste avant d'en avoir besoin, cela en fait une doublure très efficace pour me donner les noms de classe appropriés, c'est parce que j'ai déjà un compteur pour les identifiants à utiliser plus tard dans le programme. Ceci est un bref exemple de la façon dont j'utiliserai cette partie.
<divclass='row-{$row_pos}'> random data <div>
Cela me donne des classes paires et impaires sur chaque ligne afin que je puisse utiliser la classe correcte et rayer mes résultats imprimés sur la page.
L'exemple complet de ce que j'utilise note que l'ID a le compteur qui lui est appliqué et la classe a mon résultat impair / pair qui lui est appliqué .:
Attention, pour certaines raisons, cette condition n'est pas évaluée à VRAI dans une déclaration de boucle for , comme indiqué ci-dessous:
Au début de chaque itération, expr2est évalué. S'il prend la valeur TRUE, la boucle continue et les instructions imbriquées sont exécutées. S'il est évalué à FALSE, l'exécution de la boucle se termine.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Réponses:
Vous aviez raison de penser que le mod était un bon point de départ. Voici une expression qui retournera vrai si
$number
est pair, faux si impair:Fonctionne pour chaque valeur PHP entière , voir aussi Opérateurs arithmétiques PHP .
Exemple:
Production:
la source
Une autre option est une simple vérification des bits.
par exemple:
la source
Oui en utilisant le mod
la source
Bien que toutes les réponses soient bonnes et correctes, une solution simple en une seule ligne est:
Soit:
ou:
fonctionne très bien.
la source
ou
la source
if (~string.indexOf("@")) {}
au lieu deif (string.indexOf("@") !== -1) {}
. Je préfère voir les conditions se traduire par un simple vrai ou faux. Mais oui, cela peut être un peu déroutant pour les personnes qui ne connaissent pas cette syntaxe.Une autre option consiste à vérifier si le dernier chiffre est un nombre pair:
Ou pour le rendre plus rapide, utilisez
isset()
au lieu dearray_search
:Ou pour le rendre plus rapide ( bat
mod operator
parfois ):Voici le test de temps comme preuve de mes résultats.
la source
in_array
qui bat parfois l'opérateur mod.$num & 1
:). Vous pouvez également le faire hexadécimal: tableau (0, 2, 4, 6, 8, A, C, E, F): D.J'ai fait un peu de test et j'ai découvert qu'entre le mod
is_int
et l'&
opérateur-, le mod est le plus rapide, suivi de près par l'opérateur &.is_int
est presque 4 fois plus lent que le mod.J'ai utilisé le code suivant à des fins de test:
Les résultats que j'ai obtenus étaient assez cohérents. Voici un exemple:
la source
Tous les nombres pairs divisés par 2 donneront un entier
la source
Zéro est un nombre pair. En d'autres termes, sa parité - la qualité d'un entier étant pair ou impair - est paire. Le moyen le plus simple de prouver que zéro est pair est de vérifier qu'il correspond à la définition de "pair": c'est un multiple entier de 2, spécifiquement 0 × 2. Par conséquent, zéro partage toutes les propriétés qui caractérisent les nombres pairs: 0 est divisible par 2, 0 est entouré des deux côtés par des nombres impairs, 0 est la somme d'un entier (0) avec lui-même, et un ensemble de 0 objets peut être divisé en deux ensembles égaux. depuis http://en.wikipedia.org/wiki/Parity_of_zero
la source
Ce code vérifie si le nombre est impair ou même en PHP. Dans l'exemple
$a
est2
et vous obtenez un nombre pair. Si vous avez besoin d'étranges, modifiez la$a
valeurla source
PHP convertit automatiquement null et une chaîne vide en zéro. Cela se produit également avec modulo. À cet effet, le code
avec la valeur $ number = '' ou $ number = null, le résultat est true. Je le teste donc un peu plus étendu:
Cette fonction renvoie 1 pour tout nombre impair, 0 pour tout nombre pair et false lorsqu'il ne s'agit pas d'un nombre. J'écris toujours === true ou === false pour me faire savoir (et aux autres programmeurs) que le test est comme prévu.
la source
Ce travail pour moi ..!
la source
Je fais l'hypothèse qu'il y a déjà un compteur en place. dans $ i qui est incrémenté à la fin d'une boucle, cela fonctionne pour moi en utilisant une requête abrégée.
Alors, qu'est-ce que cela fait, eh bien, il interroge la déclaration que nous faisons essentiellement $ i est impair, selon que son vrai ou son faux décidera de ce qui sera retourné. La valeur renvoyée remplit notre variable $ row_pos
Mon utilisation de ceci est de le placer à l'intérieur de la boucle foreach, juste avant d'en avoir besoin, cela en fait une doublure très efficace pour me donner les noms de classe appropriés, c'est parce que j'ai déjà un compteur pour les identifiants à utiliser plus tard dans le programme. Ceci est un bref exemple de la façon dont j'utiliserai cette partie.
Cela me donne des classes paires et impaires sur chaque ligne afin que je puisse utiliser la classe correcte et rayer mes résultats imprimés sur la page.
L'exemple complet de ce que j'utilise note que l'ID a le compteur qui lui est appliqué et la classe a mon résultat impair / pair qui lui est appliqué .:
en résumé, cela me donne un moyen très simple de créer une jolie table.
la source
Essaye ça,
la source
Attention, pour certaines raisons, cette condition n'est pas évaluée à VRAI dans une déclaration de boucle for , comme indiqué ci-dessous:
Cela ne fonctionne PAS :
Cela ne fonctionne PAS :
Cela ne fonctionne PAS :
Cela fonctionne bien :
la source
la source
la source
Essayez celui-ci avec le champ #Input
la source