在PHP中找出一个数字/变量是奇数还是偶数的最简单最基本的方法是什么? 这和mod有关吗?
我试过一些剧本,但是…谷歌目前没有发送。
在PHP中找出一个数字/变量是奇数还是偶数的最简单最基本的方法是什么? 这和mod有关吗?
我试过一些剧本,但是…谷歌目前没有发送。
当前回答
这段代码检查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>";
}
其他回答
虽然所有的答案都是正确的,但简单的解决方法是:
$check = 9;
:
echo ($check & 1 ? 'Odd' : 'Even');
or:
echo ($check % 2 ? 'Odd' : 'Even');
工作得很好。
另一种方法是检查最后一位是否为偶数:
$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操作符):
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
// Even Number
}else{
// Odd Number
}
这是一个时间测试来证明我的发现。
试试这个带有#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.";
}
}
?>
我做了一些测试,发现在mod, is_int和&-操作符之间,mod是最快的,紧随其后的是&-操作符。 Is_int几乎比mod慢4倍。
I used the following code for testing purposes: $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>"; The results I got were pretty consistent. Here's a sample: 0.041879177093506 seconds mod 0.15969395637512 seconds is_int 0.044223070144653 seconds & operator
//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.";
}