use*_*585 250 php variables numbers
什么是最简单的最基本的方法来确定数字/变量是奇数还是甚至在PHP中?这与mod有关吗?
我已经尝试了一些脚本,但是谷歌目前还没有提供.
Tim*_*per 547
你是正确的认为mod是一个很好的起点.这是一个表达式,如果$number是偶数则返回true,如果是奇数则返回false:
$number % 2 == 0
Run Code Online (Sandbox Code Playgroud)
例:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
Run Code Online (Sandbox Code Playgroud)
输出:
它甚至是
Paw*_*iel 189
另一种选择是简单的位检查.
n & 1
Run Code Online (Sandbox Code Playgroud)
例如:
if ( $num & 1 ) {
//odd
} else {
//even
}
Run Code Online (Sandbox Code Playgroud)
Aar*_* W. 23
是的使用mod
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
Run Code Online (Sandbox Code Playgroud)
虽然所有答案都是正确的,但一行中的简单解决方案是:
$check = 9;
Run Code Online (Sandbox Code Playgroud)
之一:
echo ($check & 1 ? 'Odd' : 'Even');
Run Code Online (Sandbox Code Playgroud)
要么:
echo ($check % 2 ? 'Odd' : 'Even');
Run Code Online (Sandbox Code Playgroud)
效果很好.
小智 7
(bool)($number & 1)
Run Code Online (Sandbox Code Playgroud)
要么
(bool)(~ $number & 1)
Run Code Online (Sandbox Code Playgroud)
另一种选择是检查最后一位数字是否为偶数:
$value = "1024";// A Number
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($value, -1),$even)){
// Even Number
}else{
// Odd Number
}
Run Code Online (Sandbox Code Playgroud)
或者为了加快速度,请使用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
}
Run Code Online (Sandbox Code Playgroud)
或者让它更快(有时节拍mod operator):
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
// Even Number
}else{
// Odd Number
}
Run Code Online (Sandbox Code Playgroud)
这是时间测试,作为我的发现的证明.
我做了一些测试,发现在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>";
Run Code Online (Sandbox Code Playgroud)
我得到的结果非常一致.这是一个示例:
0.041879177093506 seconds mod
0.15969395637512 seconds is_int
0.044223070144653 seconds & operator
Run Code Online (Sandbox Code Playgroud)
PHP 正在将 null 和空字符串自动转换为零。模数也会发生这种情况。因此将代码
$number % 2 == 0 or !($number & 1)
Run Code Online (Sandbox Code Playgroud)
值 $number = '' 或 $number = null 结果为真。我对其进行了测试,因此扩展了一些:
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;
}
Run Code Online (Sandbox Code Playgroud)
此函数对于任何奇数返回 1,对于任何偶数返回 0,当它不是数字时返回 false。我总是写 === true 或 === false 来让我自己(和其他程序员)知道测试是按预期进行的。