web-dev-qa-db-ja.com

数が奇数か偶数かをテストする

PHPで数値/変数が奇数か偶数かを調べるための最も簡単で基本的な方法は何ですか?それはmodと関係がありますか?

私はいくつかのスクリプトを試してみましたが..グーグルは現時点では配信されていません。

241
user1022585

あなたはmodが始めるのに良い場所だと思っていました。これは$numberが偶数の場合はtrue、奇数の場合はfalseを返す式です。

$number % 2 == 0

すべての 整数に有効PHP value、同様に参照してください。 算術演算子PHP

例:

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

出力:

それもです

535
Tim Cooper

他の選択肢は、単純なビットチェックです。

n & 1

例えば:

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

はい、modを使っています

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

すべての答えは正しくて正しいですが、1行で簡単な解決策は次のとおりです。

$check = 9;

どちらか:

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

または

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

とてもうまくいきます。

8
Tarik
(bool)($number & 1)

または

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

もう1つの選択肢は、最後の桁が偶数かどうかを確認することです。

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

もっと速くするには、array_searchの代わりにisset()を使います。

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

または より速く 時にmod operatorを打ちます

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

これが私の発見の証拠としての timeテスト です。

7
Subin

私は少しテストをしました、そして、mod is_int&-演算子の間で、modが最速で、&演算子がそれに続くということがわかりました。 is_intはmodの4倍近く遅くなります。

テスト目的で次のコードを使用しました。

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

私が得た結果はかなり一貫していました。これがサンプルです:

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

2で割ったすべての偶数は整数になります

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

PHPはnullと空の文字列を自動的にゼロに変換します。これはモジュロでも起こります。そのため、コードは

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

値$ number = ''または$ number = nullの場合、結果はtrueになります。私はそれをやや拡張してテストします。

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

この関数は、奇数の場合は1を、偶数の場合は0を返し、数値でない場合はfalseを返します。テストが意図したとおりであることを自分自身(および他のプログラマ)に知らせるために、常に=== trueまたは=== falseと書きます。

2
Loek Bergman

私はすでにカウンターが設置されていると仮定しています。ループの終わりでインクリメントされる$ iでは、これは私にとっては省略形の問い合わせを使ってうまくいきます。

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

それで、これが何をするのか、それが真実か偽かが返されるものを決定するかどうかに依存して、$ iは本質的に変わっているステートメントを問い合わせます。戻り値は、変数$ row_posに格納されます。

これは私が必要とする直前にforeachループの中に置くことです。これは私に適切なクラス名を与えることを非常に効率的なライナーにします、これは私がidを使うためのカウンタをすでに持っているからですプログラムの後半です。これは私がこの部分をどのように使用するかの簡単な例です。

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

これにより、各行に奇数と偶数のクラスが表示されるので、正しいクラスを使用して、印刷結果をページの下にストライプできます。

私が使うものの完全な例は、idがそれに適用されたカウンタを持っていて、クラスがそれに適用された私の奇数/偶数結果を持っていることに注意してください:

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

要約すると、これは私にかわいいテーブルを作成するための非常に簡単な方法を与えてくれます。

1
Chris

このコードは、PHPで数値が奇数か偶数かを確認します。例では$a2であり、あなたは偶数を得ます。奇数が必要な場合は$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
//for numbers n [0,1,2,3,4....]

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

ゼロは偶数です。言い換えれば、そのパリティー(整数の偶数または奇数の品質)は偶数です。ゼロが偶数であることを証明する最も簡単な方法は、それが "even"の定義に適合することを確認することです。これは、2の整数倍、具体的には0×2です。は2で割り切れ、0は両側が奇数で囲まれ、0は整数(0)とそれ自体の和で、0個のオブジェクトの集合は2つの等しい集合に分割できます。 http://ja.wikipedia.org/wiki/Parity_of_zero から

1
sumit

これを試して、

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