[Php] 测试数字是奇数还是偶数


Answers

另一种选择是简单的位检查。

n & 1

例如:

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

找出数字/变量是奇数还是在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 operator ):

$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
  // Even Number
}else{
  // Odd Number
}

这是时间测试 ,以证明我的发现。




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

$number = 4;
if(is_int($number/2))
{
   echo("Integer");
}
else
{
   echo("Not Integer");
}



我做了一些测试,发现在mod, is_int& is_int之间,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



这段代码检查这个数字是奇数还是在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>";
}



//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个对象可以被分成两个相等的组。 来自http://en.wikipedia.org/wiki/Parity_of_zero




$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.";
    }
    }
?>