Verifica se il numero è pari o dispari

Qual è il modo più semplice di base per scoprire se un numero / variabile è pari o dispari in PHP? Ha qualcosa a che fare con mod?

Ho provato alcuni script ma … Google non sta consegnando al momento.

Avevi ragione nel pensare che la mod fosse un buon punto di partenza. Ecco un’espressione che restituirà true se $number è pari, false se dispari:

 $number % 2 == 0 

Funziona per ogni valore PHP intero , vedi anche Operatori aritmetici PHP .

Esempio:

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

Produzione:

È pari

Un’altra opzione è un semplice controllo dei bit.

 n & 1 

per esempio:

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

Sì, usando il mod

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

Un’altra opzione è verificare se l’ultima cifra è un numero pari:

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

O per renderlo più veloce, usa isset() invece di 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 } 

O per renderlo più veloce ( batte l’ mod operator a volte ):

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

Ecco il test del tempo come prova delle mie scoperte.

 (bool)($number & 1) 

o

 (bool)(~ $number & 1) 

Mentre tutte le risposte sono buone e corrette, la soluzione semplice in una riga è:

 $check = 9; 

o:

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

o:

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

funziona molto bene

Ho fatto un po ‘di test e ho scoperto che tra mod, is_int e & -operator, mod è il più veloce, seguito da vicino da & -operator. is_int è quasi 4 volte più lento di mod.

Ho usato il seguente codice a scopo di 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
";

I risultati che ho ottenuto sono stati abbastanza coerenti. Ecco un esempio:

 0.041879177093506 seconds mod 0.15969395637512 seconds is_int 0.044223070144653 seconds & operator 

Tutti i numeri pari divisi per 2 daranno come risultato un numero intero

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

PHP sta convertendo null e una stringa vuota automaticamente a zero. Questo succede anche con il modulo. Perciò il codice

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

con valore $ numero = ” o $ numero = risultato nullo in vero. Lo collaudo per un po ‘più esteso:

 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; }

Questa funzione restituisce 1 per ogni numero dispari, 0 per qualsiasi numero pari e falso quando non è un numero. Scrivo sempre === true o === false per consentire a me stesso (e agli altri programmatori) di sapere che il test è come previsto.

 //for numbers n [0,1,2,3,4....] if((n+2)%2==1) { //odd }else { //even } 

Zero è un numero pari. In altre parole, la sua parità – la qualità di un numero intero pari o dispari – è pari. Il modo più semplice per dimostrare che lo zero è pari è verificare che si adatti alla definizione di “pari”: è un multiplo intero di 2, in particolare 0 × 2. Di conseguenza, lo zero condivide tutte le proprietà che caratterizzano i numeri pari: 0 è divisibile per 2, 0 è circondato su entrambi i lati da numeri dispari, 0 è la sum di un intero (0) con se stesso, e un insieme di 0 oggetti può essere diviso in due gruppi uguali. da http://en.wikipedia.org/wiki/Parity_of_zero

Sto supponendo che ci sia già un contatore. in $ i che viene incrementato alla fine di un ciclo, funziona per me usando una query abbreviata.

 $row_pos = ($i & 1) ? 'odd' : 'even'; 

Quindi, cosa fa questo, beh, si interroga la dichiarazione che stiamo facendo in sostanza $ i è dispari, a seconda che sia vero o falso deciderà che cosa viene restituito. Il valore restituito popola la nostra variabile $ row_pos

Il mio uso è di posizionarlo all’interno del ciclo foreach, proprio prima che ne abbia bisogno, Questo lo rende uno strumento molto efficiente per darmi i nomi di class appropriati, questo perché ho già un contatore per gli id ​​da utilizzare più tardi nel programma. Questo è un breve esempio di come userò questa parte.

 
random data

Questo mi dà classi pari e dispari su ogni riga in modo da poter utilizzare la class corretta e stripe i miei risultati stampati in fondo alla pagina.

L’esempio completo di ciò che uso nota all’id ha applicato il contatore e la class ha applicato il mio risultato pari / dispari a questo .:

 $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++; }

in breve, questo mi dà un modo molto semplice per creare una bella tabella.

Questo codice controlla se il numero è pari o dispari in PHP. Nell’esempio $a è 2 e ottieni il numero pari. Se hai bisogno di odd, cambia il valore $a

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

This Number is $a Even

"; }else{ echo "

This Number is $a Odd

"; }

Prova questo,

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

Prova questo con il campo #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."; } } ?>