PHPで数値/変数が奇数か偶数かを調べるための最も簡単で基本的な方法は何ですか?それはmodと関係がありますか?
私はいくつかのスクリプトを試してみましたが..グーグルは現時点では配信されていません。
他の選択肢は、単純なビットチェックです。
n & 1
例えば:
if ( $num & 1 ) {
//odd
} else {
//even
}
はい、modを使っています
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
すべての答えは正しくて正しいですが、1行で簡単な解決策は次のとおりです。
$check = 9;
どちらか:
echo ($check & 1 ? 'Odd' : 'Even');
または
echo ($check % 2 ? 'Odd' : 'Even');
とてもうまくいきます。
(bool)($number & 1)
または
(bool)(~ $number & 1)
もう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テスト です。
私は少しテストをしました、そして、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
2で割ったすべての偶数は整数になります
$number = 4;
if(is_int($number/2))
{
echo("Integer");
}
else
{
echo("Not Integer");
}
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と書きます。
私はすでにカウンターが設置されていると仮定しています。ループの終わりでインクリメントされる$ 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++;
}
要約すると、これは私にかわいいテーブルを作成するための非常に簡単な方法を与えてくれます。
このコードは、PHPで数値が奇数か偶数かを確認します。例では$a
は2
であり、あなたは偶数を得ます。奇数が必要な場合は$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>";
}
//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 から
これを試して、
$number = 10;
switch ($number%2)
{
case 0:
echo "It's even";
break;
default:
echo "It's odd";
}