Testez si le nombre est impair ou pair

Quel est le moyen le plus simple de savoir si un nombre / une 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.

Vous aviez raison de penser que le mod était un bon sharepoint départ. Voici une expression qui retournera true si $number est pair, false si impair:

 $number % 2 == 0 

Fonctionne pour toute valeur PHP entière , voir aussi Opérateurs arithmétiques PHP .

Exemple:

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

Sortie:

C’est même

Une autre option est une simple vérification des bits.

 n & 1 

par exemple:

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

Oui en utilisant le mod

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

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 } 

Ou pour le rendre plus rapide ( bat parfois l’ mod operator ):

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

Voici le test du temps comme preuve de mes conclusions.

 (bool)($number & 1) 

ou

 (bool)(~ $number & 1) 

Bien que toutes les réponses soient correctes et correctes, la solution simple en une seule ligne est la suivante:

 $check = 9; 

non plus:

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

ou:

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

fonctionne très bien.

J’ai fait un peu de test, et j’ai constaté qu’entre mod, is_int et the -operator, le mod était 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:

 $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
";

Les résultats que j’ai obtenus étaient assez cohérents. Voici un exemple:

 0.041879177093506 seconds mod 0.15969395637512 seconds is_int 0.044223070144653 seconds & operator 

Tous les nombres pairs divisés par 2 donneront un entier

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

PHP convertit automatiquement une chaîne vide et une chaîne vide en zéro. Cela se produit aussi avec modulo. Pour ce faire, le code

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

avec la valeur $ number = ” ou $ number = null donne la valeur 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.
"; }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; }

Cette fonction renvoie 1 pour tout nombre impair, 0 pour tout nombre pair et faux pour un nombre différent. J’écris toujours === true ou === false pour me faire savoir (et aux autres programmeurs) que le test est comme prévu.

 //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”: il s’agit d’un multiple entier de 2, spécifiquement 0 × 2. En conséquence, zéro partage toutes les propriétés caractérisant les nombres pairs: 0 est divisible par 2, 0 est entouré des deux côtés par des nombres impairs, 0 est la sum d’un entier (0) avec lui-même, et un ensemble de 0 objects peut être divisé en deux ensembles égaux. de http://en.wikipedia.org/wiki/Parity_of_zero

Je suppose que le comptoir est déjà 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, bien, il interroge la déclaration que nous faisons essentiellement $ i est étrange, selon que sa valeur vraie ou fausse décidera de ce qui sera retourné. La valeur renvoyée remplit notre variable $ row_pos

Mon utilisation de ceci est de le placer dans la boucle foreach, juste avant que j’en ait besoin, ce qui en fait une ligne très efficace pour me donner les noms de classes appropriés, parce que j’ai déjà un compteur pour que l’ID utilise plus tard dans le programme. Ceci est un bref exemple de la façon dont je vais utiliser cette partie.

 
random data

Cela me donne des classes étranges et égales sur chaque ligne, donc je peux utiliser la classe correcte et répartir mes résultats imprimés sur la page.

L’exemple complet de ce que j’utilise note l’id a le compteur appliqué à lui et la classe a mon résultat impair / pair appliqué à lui .:

 $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 résumé, cela me donne un moyen très simple de créer une jolie table.

Ce code vérifie si le nombre est impair ou même en PHP. Dans l’exemple, $a est 2 et vous obtenez un nombre pair. Si vous avez besoin de impair, changez la valeur $a

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

This Number is $a Even

"; }else{ echo "

This Number is $a Odd

"; }

Essaye ça,

 $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';
 //checking even and odd $num =14; $even = ($num % 2 == 0); $odd = ($num % 2 != 0); if($even){ echo "Number is even."; } else { echo "Number is odd."; } 

Essayez celui-ci avec le champ #Input

 < ?php //checking even and odd echo '
'; echo "\n"; echo "\n"; echo ""; $num = 0; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["num"])) { $numErr = "Number is required."; echo $numErr; die(); } else { $num = $_POST["num"]; } $even = ($num % 2 == 0); $odd = ($num % 2 != 0); if ($num > 0){ if($even){ echo "Number is even."; } else { echo "Number is odd."; } } else { echo "Not a number."; } } ?>