测试数字是奇数还是偶数

时间:2011-10-31 20:17:57

标签: php variables numbers

在PHP中找出数字/变量是奇数还是偶数的最简单的最基本方法是什么? 这与mod有关吗?

我尝试了一些脚本,但是谷歌目前还没有提供。

19 个答案:

答案 0 :(得分:536)

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

$number % 2 == 0

适用于每个integerPHP值,请参阅Arithmetic OperatorsPHP

示例:

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

输出:

  

甚至

答案 1 :(得分:184)

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

n & 1

例如:

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

答案 2 :(得分:23)

是的,使用mod

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

答案 3 :(得分:8)

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

$check = 9;

或者:

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

或:

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

效果很好。

答案 4 :(得分:7)

(bool)($number & 1)

(bool)(~ $number & 1)

答案 5 :(得分:7)

另一种选择是检查最后一位数字是否为偶数:

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

或者更快 beats mod operator at times ):

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

以下是time test作为我的调查结果的证明。

答案 6 :(得分:5)

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

答案 7 :(得分:2)

所有偶数除以2将产生整数

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

答案 8 :(得分:2)

  

在不使用条件和循环语句的情况下检查偶数或奇数。

这对我有用..!

$(document).ready(function(){
    $("#btn_even_odd").click(function(){
        var arr = ['Even','Odd'];
        var num_even_odd = $("#num_even_odd").val();
        $("#ans_even_odd").html(arr[num_even_odd % 2]);
    });
});
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <title>Check Even Or Odd Number Without Use Condition And Loop Statement.</title>
</head>
<body>
<h4>Check Even Or Odd Number Without Use Condition And Loop Statement.</h4>
<table>
    <tr>
        <th>Enter A Number :</th>
        <td><input type="text" name="num_even_odd" id="num_even_odd" placeholder="Enter Only Number"></td>
    </tr>
    <tr>
        <th>Your Answer Is :</th>
        <td id="ans_even_odd" style="font-size:15px;color:gray;font-weight:900;"></td>
    </tr>
    <tr>
        <td><input type="button" name="btn_even_odd" id="btn_even_odd" value="submit"></td>
    </tr>
</table>
</body>
</html>

答案 9 :(得分:2)

PHP将null和空字符串自动转换为零。这也发生在模数上。因此代码

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

价值$ number =&#39;&#39;或$ 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;
}

对于任何奇数,此函数返回1,对于任何偶数,此函数返回0;如果不是数字,则返回false。我总是写=== true或=== false让自己(和其他程序员)知道测试是按照预期进行的。

答案 10 :(得分:1)

此代码检查数字是奇数还是甚至是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>";
}

答案 11 :(得分:1)

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

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

那么这是做什么的,它会查询我们正在制作的语句$ i是奇数,取决于它的真或假将决定返回什么。返回的值填充变量$ row_pos

我使用它是将它放在foreach循环中,就在我需要它之前,这使得它成为一个非常有效的一个衬里给我适当的类名,这是因为我已经有一个id的计数器&# 39; s以便在程序中使用。这是我将如何使用这部分的简短例子。

<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++;
}

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

答案 12 :(得分:1)

//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

答案 13 :(得分:0)

试试这个,

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

答案 14 :(得分:0)

$number %2 = 1 如果是奇数...所以不必使用非偶数...

$number = 27;

if ($number % 2 == 1) {
  print "It's odd";
}

答案 15 :(得分:-1)

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

答案 16 :(得分:-1)

private class KeyIterator implements Iterator<K> {

    private int currentIndex; // Current position in hash table
    //private int numberLeft; // Number of entries left in iteration

    private KeyIterator() {
        currentIndex = 0;
        //numberLeft = numberOfEntries;
    } // end default constructor

    public boolean hasNext() {
        return currentIndex < numberOfEntries;
    } // end hasNext

    public K next() {
        K result = null;

        if (hasNext()) {
            LList<TableEntry> items = hashTable[currentIndex];
            if (items != null) {
                Iterator<TableEntry> traverse = items.getIterator();
                while (traverse.hasNext()) {
                    TableEntry<K, V> item = traverse.next();
                    result = item.key;

//                        if (items.contains(item)) {
//                            hashTable[currentIndex] = items;
//                        }
//                        numberLeft--;
                    numberOfEntries++;
                }//reaches last entry in hash table w/ current index
                currentIndex++;
            } else {//items == null, that is, there is no llist in the current hash table
                currentIndex++;
            }
        } else {//reaches the end of the hash table
            throw new NoSuchElementException();
     }
        return result;
    } // end next

    public void remove() {
        throw new UnsupportedOperationException();
    } // end remove

} // end KeyIterator

答案 17 :(得分:-1)

使用#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.";
    }
    }
?>

答案 18 :(得分:-3)

由于某些原因,警告在for loop声明中此条件的计算结果为TRUE,如下所示:

在每次迭代的开始,将评估expr2。如果它 计算结果为TRUE,循环继续,并且嵌套语句为 被执行。如果计算结果为FALSE,则循环的执行结束。


有效:

for ($i=0; $i % 2 === 1 && $i < count($str); $i++){
  // echo "-----------\n";
}

有效:

for ($i=0; ($i % 2 === 1) && $i < count($str); $i++){
  // echo "-----------\n";
}

有效:

for ($i=0; ($i % 2) === 1 && $i < count($str); $i++){
  // echo "-----------\n";
}

此方法确定

for ($i=0; $i<count($str); $i++){
  if ($i % 2 === 1) {
    // echo "-----------\n";
  }
}