在PHP中找出一个数字/变量是奇数还是偶数的最简单最基本的方法是什么? 这和mod有关吗?
我试过一些剧本,但是…谷歌目前没有发送。
在PHP中找出一个数字/变量是奇数还是偶数的最简单最基本的方法是什么? 这和mod有关吗?
我试过一些剧本,但是…谷歌目前没有发送。
当前回答
另一种方法是检查最后一位是否为偶数:
$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
}
这是一个时间测试来证明我的发现。
其他回答
$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';
PHP自动将null和空字符串转换为0。对模也是这样。因此,代码将
$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来让我自己(和其他程序员)知道测试是预期的。
你认为mod是个不错的开始,这是对的。下面是一个表达式,如果$number为偶数则返回true,如果为奇数则返回false:
$number % 2 == 0
适用于所有integerPHP值,参见算术操作符sphp。
例子:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
输出:
它甚至
<?php
// Recursive function to check whether
// the number is Even or Odd
function check($number){
if($number == 0)
return 1;
else if($number == 1)
return 0;
else if($number<0)
return check(-$number);
else
return check($number-2);
}
// Check the number odd or even
$number = 35;
if(check($number))
echo "Even";
else
echo "Odd";
?>
因此,输出将是Odd
我是在假设已经有了一个计数器。在$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++;
}
总之,这为创建漂亮的表提供了一种非常简单的方法。