PHPで数値/変数が奇数または偶数であるかどうかを確認する最も簡単な最も基本的な方法は何ですか?それはmodと関係がありますか?
いくつかのスクリプトを試しましたが、現時点ではgoogleが配信されていません。
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
PHPで数値/変数が奇数または偶数であるかどうかを確認する最も簡単な最も基本的な方法は何ですか?それはmodと関係がありますか?
いくつかのスクリプトを試しましたが、現時点ではgoogleが配信されていません。
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
回答:
あなたはmodを始めるのに良い場所だと思っていました。以下は、$number
偶数の場合はtrue 、奇数の場合はfalseを返す式です。
$number % 2 == 0
すべての整数PHP値で機能します。算術演算子PHPも参照してください。
例:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
出力:
それは
別のオプションは、単純なビットチェックです。
n & 1
例えば:
if ( $num & 1 ) {
//odd
} else {
//even
}
(bool)($number & 1)
または
(bool)(~ $number & 1)
if (~string.indexOf("@")) {}
代わりにif (string.indexOf("@") !== -1) {}
。条件の結果が単純なtrueまたはfalseになることを確認します。しかし、はい、この構文に慣れていない人にとっては少し混乱するかもしれません。
別のオプションは、最後の桁が偶数かどうかを確認することです:
$value = "1024";// A Number
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($value, -1),$even)){
// Even Number
}else{
// Odd Number
}
またはそれをより速くするために、isset()
代わりにを使用して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
}
またはそれをより速くするために(時々ビートmod operator
):
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
// Even Number
}else{
// Odd Number
}
これが私の発見の証拠としての時間テストです。
in_array
mod演算子に勝るコードを含めるようにコードを更新しました。
$num & 1
:) の10進数バージョンです。16進数で実行することもできます:array(0、2、4、6、8、A、C、E、F):D。
私は少しテストを行いましたが、mod is_int
と&
-operatorの間で、modが最も速く、&-operatorがそれに続いています。
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
//for numbers n [0,1,2,3,4....]
if((n+2)%2==1) {
//odd
}else {
//even
}
ゼロは偶数です。つまり、そのパリティ(整数の品質が偶数か奇数か)は偶数です。ゼロが偶数であることを証明する最も簡単な方法は、「偶数」の定義に適合することを確認することです。これは、2の整数倍、具体的には0×2です。その結果、ゼロは偶数を特徴付けるすべてのプロパティを共有します:0は2で割り切れます。0は両側が奇数で囲まれ、0は整数(0)との合計であり、0のオブジェクトのセットは2つの等しいセットに分割できます。http://en.wikipedia.org/wiki/Parity_of_zeroから
このコードは、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>";
}
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と書いて、テストが意図したとおりであることを自分(および他のプログラマー)に知らせます。
使用条件およびループステートメントなしで偶数または奇数をチェックします。
私のためのこの仕事..!
$(document).ready(function(){
$("#btn_even_odd").click(function(){
var arr = ['Even','Odd'];
var num_even_odd = $("#num_even_odd").val();
$("#ans_even_odd").html(arr[num_even_odd % 2]);
});
});
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Check Even Or Odd Number Without Use Condition And Loop Statement.</title>
</head>
<body>
<h4>Check Even Or Odd Number Without Use Condition And Loop Statement.</h4>
<table>
<tr>
<th>Enter A Number :</th>
<td><input type="text" name="num_even_odd" id="num_even_odd" placeholder="Enter Only Number"></td>
</tr>
<tr>
<th>Your Answer Is :</th>
<td id="ans_even_odd" style="font-size:15px;color:gray;font-weight:900;"></td>
</tr>
<tr>
<td><input type="button" name="btn_even_odd" id="btn_even_odd" value="submit"></td>
</tr>
</table>
</body>
</html>
私はすでにカウンターが設置されていると仮定しています。ループの最後でインクリメントされる$ iでは、これは簡単なクエリを使用して動作します。
$row_pos = ($i & 1) ? 'odd' : 'even';
つまり、これが何をするかというと、本質的に$ iが作成しているステートメントをクエリします。$ iは、真か偽かによって、何が返されるかを決定します。戻り値は変数$ row_posに入力されます
これの私の使用は、それを必要とする直前にforeachループ内に配置することです。これにより、適切なクラス名を提供するための非常に効率的な1つのライナーが作成されます。これは、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++;
}
要約すると、これは私にきれいなテーブルを作成する非常に簡単な方法を与えます。
警告、いくつかの理由により、以下に示すように、この条件はforループ宣言でTRUEと評価されません。
各反復の始めに、
expr2
が評価されます。TRUEと評価された場合、ループが続行され、ネストされたステートメントが実行されます。評価がFALSEの場合、ループの実行は終了します。
これは機能しません:
for ($i=0; $i % 2 === 1 && $i < count($str); $i++){
// echo "-----------\n";
}
これは機能しません:
for ($i=0; ($i % 2 === 1) && $i < count($str); $i++){
// echo "-----------\n";
}
これは機能しません:
for ($i=0; ($i % 2) === 1 && $i < count($str); $i++){
// echo "-----------\n";
}
これは問題なく動作します:
for ($i=0; $i<count($str); $i++){
if ($i % 2 === 1) {
// echo "-----------\n";
}
}
$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 . "<br/>";
}
$after = microtime(true);
echo $after-$before. 'seconds';
#Inputフィールドでこれを試してください
<?php
//checking even and odd
echo '<form action="" method="post">';
echo "<input type='text' name='num'>\n";
echo "<button type='submit' name='submit'>Check</button>\n";
echo "</form>";
$num = 0;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["num"])) {
$numErr = "<span style ='color: red;'>Number is required.</span>";
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.";
}
}
?>