305 votes

Tester si le nombre est pair ou impair

Quel est le moyen le plus simple et le plus basique de savoir si un nombre/variable est pair ou impair en PHP ? Est-ce que cela a quelque chose à voir avec le mod ?

J'ai essayé quelques scripts mais google ne livre pas pour le moment.

11 votes

Mod est le terme générique abrégé pour "modulo", c'est à dire arithmétique modulaire

5 votes

Plus d'informations aquí y compris : Pour déterminer le nombre pair ou impair, il est plus rapide et plus efficace d'utiliser la fonction par bit & opérateur : $a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'

629voto

Tim Cooper Points 55292

Vous avez eu raison de penser que Mod était un bon endroit pour commencer. Voici une expression qui renverra vrai si $number est pair, faux si impair :

$number % 2 == 0

Fonctionne pour tout entier PHP valeur, voir aussi Opérateurs arithmétiques PHP .

Exemple :

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

Sortie :

C'est même

14 votes

Si vous utilisez cette méthode en boucle ou en grande quantité, vous pouvez envisager 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.

0 votes

Cela fonctionne bien mais je me demande quelle est la logique derrière cela ? Pourquoi la valeur "true" est-elle donnée si "10 == 0" ?

0 votes

La logique veut que tout nombre pair soit divisible par 2 sans reste. Si vous utilisez $number % 10 et que votre $number est égal à 20, la réponse sera vraie, mais pas si votre $number est égal à 22. Vous pourriez utiliser $number % 10 si vous essayez de trouver tous les 10 éléments d'une boucle, par exemple.

221voto

Arius2038 Points 2217

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

n & 1

par exemple :

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

1 votes

Ce serait certainement le moyen le plus rapide d'utiliser des entiers dans un langage comme le C, et de loin. Quelqu'un a-t-il fait des tests pour déterminer si cela est vrai aussi pour PHP ?

1 votes

C'est probablement le moyen le plus rapide, si le moteur PHP a été bien codé.

1 votes

Je dirais que c'est le moyen le plus rapide et le plus direct. Parfait.

27voto

Aaron W. Points 5431

Oui, en utilisant le mod

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

8voto

Olegs Points 41
(bool)($number & 1)

ou

(bool)(~ $number & 1)

3 votes

Il s'agit d'un opérateur bit à bit, je crois, donc à moins que vous ne sachiez ce que vous faites avec cette fantaisie, j'éviterais cette syntaxe.

1 votes

Je dois admirer la syntaxe, les choses qui fonctionnent sans savoir pourquoi, vous rappelle à quel point nous sommes petits dans le monde de la physique, des mathématiques et, bien, ajoutez juste une ligne sur le numéro 1, pas 2...

0 votes

J'utilise souvent les opérateurs bit à bit en JS. Par exemple if (~string.indexOf("@")) {} au lieu de if (string.indexOf("@") !== -1) {} . Je préfère que les conditions se traduisent par un simple vrai ou faux. Mais oui, cela peut être un peu déroutant pour les personnes qui ne sont pas familières avec cette syntaxe.

6voto

Subin Points 1110

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 faire plus rapide ( battements mod operator par moments ) :

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

Voici le test de temps comme une preuve de mes découvertes.

0 votes

Au Downvoter : Puis-je savoir pourquoi vous avez rétrogradé ?

5 votes

C'est très cher, comparé aux autres méthodes.

0 votes

@grantwparks Eh bien, la différence entre utiliser isset & mod n'est que de 0,5007 seconde. Mais, recherche par tableau est très coûteux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X