web-dev-qa-db-fra.com

Testez si le nombre est impair ou pair

Quel est le moyen le plus simple et le plus simple de savoir si un nombre/une variable est impair ou même en PHP?

J'ai essayé quelques scripts mais .. Google ne fournit pas pour le moment.

237
user1022585

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

$number % 2 == 0

Fonctionne pour chaque entierPHP valeur, voir aussi Opérateurs arithmétiquesPHP .

Exemple:

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

Sortie:

C'est même

525
Tim Cooper

Une autre option est une simple vérification de bit.

n & 1

par exemple:

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

Oui en utilisant le mod

$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
22
Aaron W.

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

$check = 9;

non plus:

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

ou:

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

fonctionne très bien.

8
Tarik
(bool)($number & 1)

ou 

(bool)(~ $number & 1)
7
Olegs

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 accélérer le processus, 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 mod operator parfois):

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

Voici le test time comme preuve de mes découvertes.

7
Subin

J'ai fait quelques essais et constaté qu'entre mod, is_int et l'opérateur &-, mod est le plus rapide, suivi de près par l'opérateur &__ .is_int est presque 4 fois plus lent que 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<br>";

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

$before = microtime(true);
for ($i=0; $i<100000; $i++) {
    $test = ($number&1?true:false);
}
$after = microtime(true);

echo $after-$before." seconds & operator<br>";

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
5
Ruben Coolen

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

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

PHP est en train de convertir null et une chaîne vide automatiquement en zéro. Cela se produit aussi avec modulo. Donc le code 

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

avec la valeur $ number = '' ou $ number = null résulte en true . Je le teste 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>";
    }
}

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 si ce n'est pas un nombre. J'écris toujours === true ou === false pour que je puisse (et les autres programmeurs) savoir que le test est conforme.

2
Loek Bergman

Je suppose qu’il existe déjà un compteur. 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';

Donc, qu'est-ce que cela fait? Eh bien, il interroge la déclaration que nous faisons en substance, $ i est étrange, selon que sa valeur true ou false 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, ce qui en fait un support très efficace pour me donner les noms de classe appropriés, car je dispose déjà d'un compteur pour que l'identifiant soit utilisé. plus tard dans le programme. Ceci est un bref exemple de la façon dont je vais utiliser cette partie.

<div class='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 en bas de la page.

L'exemple complet de ce que j'utilise note notez que l'identifiant est appliqué au compteur et que le résultat impair/pair est appliqué à la classe:

$i=0;
foreach ($a as $k => $v) {

    $row_pos = ($i & 1) ? 'odd' : 'even';
    echo "<div id='A{$i}' class='row-{$row_pos}'>{$v['f_name']} {$v['l_name']} - {$v['amount']} - {$v['date']}</div>\n";

$i++;
}

en résumé, cela me donne un moyen très simple de créer un joli tableau.

1
Chris

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

$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>";
}
1
Narendra Chauhan
//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 pair ou impair - est paire. Le moyen le plus simple de prouver que zéro est pair est de vérifier qu'il correspond bien à la définition de "pair": il s'agit d'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 nombres impairs des deux côtés, 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. de http://en.wikipedia.org/wiki/Parity_of_zero

1
sumit

Essaye ça,

$number = 10;
 switch ($number%2)
 {
 case 0:
 echo "It's even";
 break;
 default:
 echo "It's odd";
 }
0
Sajjad Hossain