PHPtesting如果数字是奇数或偶数

什么是最简单的最基本的方法来找出一个数字/variables是奇数甚至在PHP? 这是与mod有关吗?

我已经尝试了几个脚本,但是..谷歌目前没有提供。

你认为mod是一个很好的起点。 这是一个expression式,如果$number是偶数,则返回true;如果是odd,则返回false:

 $number % 2 == 0 

适用于每个整数PHP值,请参阅算术运算符PHP

例:

 $number = 20; if ($number % 2 == 0) { print "It's even"; } 

输出:

甚至是

另一种select是简单的位检查。

 n & 1 

例如:

 if ( $num & 1 ) { //odd } else { //even } 

是的使用国防部

 $even = ($num % 2 == 0); $odd = ($num % 2 != 0); 

另一种select是检查最后一位数是否是偶数:

 $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 } 

这是时间testing ,以certificate我的发现。

 (bool)($number & 1) 

要么

 (bool)(~ $number & 1) 

我做了一些testing,发现在mod, is_int& is_int之间,mod是最快的,紧随其后的是&-operator。 is_int比mod慢了近4倍。

我使用下面的代码进行testing:

 $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 

虽然所有的答案都是正确的,但是一行中的简单解决scheme是:

 $check = 9; 

之一:

 echo ($check & 1 ? 'Odd' : 'Even'); 

要么:

 echo ($check % 2 ? 'Odd' : 'Even'); 

工作得很好。

所有的偶数除以2将得到一个整数

 $number = 4; if(is_int($number/2)) { echo("Integer"); } else { echo("Not Integer"); } 
 //for numbers n [0,1,2,3,4....] if((n+2)%2==1) { //odd }else { //even } 

零是偶数。 换句话说,它的奇偶性 – 偶数或奇数的整数质量是偶数的。 certificate零为偶数的最简单的方法是检查它是否符合“偶数”的定义:它是2的整数倍,具体地是0×2。结果,零共享表征偶数的所有属性:0可以被2整除,0的两边被奇数所包围,0是整数(0)与自身的和,一组0对象可以被分成两个相等的组。 来自http://en.wikipedia.org/wiki/Parity_of_zero

我假设已经有一个柜台了。 在循环结束时递增的$ i中,这适用于我使用简写查询。

 $row_pos = ($i & 1) ? 'odd' : 'even'; 

那么这是做什么的呢,它会查询我们所做的声明,实质上$ i是很奇怪的,取决于它的真或假将决定返回的内容。 返回的值填充我们的variables$ row_pos

我使用这个是把它放在foreach循环中,就在我需要它之前,这使得它成为一个非常高效的class轮给我适当的类名,这是因为我已经有了一个计数器的ID来利用稍后在程序中。 这是我将如何使用这个部分的一个简单的例子。

 <div class='row-{$row_pos}'> random data <div> 

这给了我每一行奇数和偶数class,所以我可以使用正确的类,并沿着页面条纹我的打印结果。

我使用的完整示例注意到了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++; } 

总之,这给了我一个非常简单的方法来创build一个漂亮的表格。

这段代码检查数字是否是奇数,甚至在PHP中。 在这个例子中, $a2 ,你得到偶数。 如果你需要奇数,那么改变$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和空string自动转换为零。 模数也是如此。 为此将代码

 $number % 2 == 0 or !($number & 1) 

值为$ number =''或$ number = null的结果是正确的。 我testing它有点更扩展:

 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来让自己(和其他程序员)知道testing是按照预期进行的。

 $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'; 

尝试这个,

 $number = 10; switch ($number%2) { case 0: echo "It's even"; break; default: echo "It's odd"; }