it-swarm.com.de

Testen Sie, ob die Anzahl gerade oder ungerade ist

Was ist der einfachste und einfachste Weg, um herauszufinden, ob eine Zahl/Variable ungerade oder sogar in PHP ist? Hat es etwas mit mod zu tun?

Ich habe ein paar Skripte ausprobiert, aber Google liefert im Moment nicht.

237
user1022585

Du hattest recht damit, dass mod ein guter Anfang war. Hier ist ein Ausdruck, der true zurückgibt, wenn $number gerade ist, false, wenn ungerade:

$number % 2 == 0

Funktioniert für jeden IntegerPHP value, siehe auch Arithmetische Operatoren)PHP .

Beispiel:

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

Ausgabe:

Es ist gerade

525
Tim Cooper

Eine weitere Option ist eine einfache Überprüfung.

n & 1

zum Beispiel:

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

Ja mit dem mod

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

Während alle Antworten gut und korrekt sind, lautet die einfache Lösung in einer Zeile:

$check = 9;

entweder:

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

oder:

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

funktioniert sehr gut.

8
Tarik
(bool)($number & 1)

oder 

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

Eine andere Möglichkeit ist zu prüfen, ob die letzte Ziffer eine gerade Zahl ist:

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

Oder um es schneller zu machen, verwenden Sie isset() anstelle von 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
}

Oder um es schneller zu machen (schlägt mod operator zuweilen):

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

Hier ist der Zeittest als Beweis für meine Erkenntnisse.

7
Subin

Ich habe ein wenig getestet und festgestellt, dass mod zwischen mod, is_int und dem &- Operator am schnellsten ist, dicht gefolgt vom & -Operator is_int ist fast viermal langsamer als mod.

Ich habe den folgenden Code zu Testzwecken verwendet:

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

Die Ergebnisse waren ziemlich konstant. Hier ist ein Beispiel:

0.041879177093506 seconds mod
0.15969395637512 seconds is_int
0.044223070144653 seconds & operator
5
Ruben Coolen

Alle durch 2 dividierten geraden Zahlen ergeben eine ganze Zahl

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

PHP konvertiert null und eine leere Zeichenfolge automatisch in eine Null. Das passiert auch bei Modulo. Dafür wird der Code 

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

mit dem Wert $ number = '' oder $ number = null ergeben sich true . Ich teste es deshalb etwas länger:

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

Diese Funktion gibt 1 für eine ungerade Zahl zurück, 0 für eine gerade Zahl und false, wenn es sich nicht um eine Zahl handelt. Ich schreibe immer === true oder === false, damit ich (und andere Programmierer) wissen lassen, dass der Test wie beabsichtigt ist.

2
Loek Bergman

Ich gehe davon aus, dass es bereits einen Zähler gibt. in $ i, das am Ende einer Schleife inkrementiert wird. Dies funktioniert für mich mit einer Kurzbefragung.

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

Also, was macht das? Nun, es fragt die Aussage ab, die wir im Wesentlichen machen. $ I ist ungerade, je nachdem, ob sein wahr oder falsch entscheiden wird, was zurückgegeben wird. Der zurückgegebene Wert füllt unsere Variable $ row_pos auf

Ich benutze es, um es in der foreach-Schleife zu platzieren, kurz bevor ich es brauche. Dies macht es zu einem sehr effizienten Einzeiler, der mir die entsprechenden Klassennamen gibt später im Programm. Dies ist ein kurzes Beispiel, wie ich diesen Teil verwenden werde.

<div class='row-{$row_pos}'> random data <div>

Dies gibt mir ungerade und gerade Klassen in jeder Reihe, so dass ich die richtige Klasse verwenden und meine gedruckten Ergebnisse auf der Seite streifen kann.

Das vollständige Beispiel für das, was ich verwende, gilt für die ID, auf die der Zähler angewendet wird, und für die Klasse wird mein Ergebnis für ungerade/gerade Ergebnisse angewendet:

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

zusammenfassend gibt mir dies eine sehr einfache Möglichkeit, eine schöne Tabelle zu erstellen.

1
Chris

Dieser Code prüft, ob die Anzahl in PHP ungerade oder gerade ist. Im Beispiel ist $a2 und Sie erhalten eine gerade Nummer. Wenn Sie ungerade benötigen, ändern Sie den $a-Wert

$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
//for numbers n [0,1,2,3,4....]

if((n+2)%2==1) {
   //odd
}else {
  //even
}

Null ist eine gerade Zahl. Mit anderen Worten, seine Parität - die Qualität einer Ganzzahl, die gerade oder ungerade ist - ist gerade. Der einfachste Weg, um zu beweisen, dass Null gleich ist, ist zu prüfen, ob sie der Definition von "gerade" entspricht: Es handelt sich um ein ganzzahliges Vielfaches von 2, insbesondere 0 × 2. Als Ergebnis teilt Null alle Eigenschaften, die gerade Zahlen kennzeichnen: 0 ist durch 2 teilbar, 0 ist auf beiden Seiten von ungeraden Zahlen umgeben, 0 ist die Summe einer Ganzzahl (0) mit sich selbst und eine Menge von 0-Objekten kann in zwei gleiche Mengen aufgeteilt werden. von http://en.wikipedia.org/wiki/Parity_of_zero

1
sumit

Versuche dies,

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