找出数字/变量在PHP中是奇数还是偶数的最简单,最基本的方法是什么?与mod有关吗?
我已经尝试了一些脚本,但是.. google目前无法交付。
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
找出数字/变量在PHP中是奇数还是偶数的最简单,最基本的方法是什么?与mod有关吗?
我已经尝试了一些脚本,但是.. google目前无法交付。
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Answers:
您认为mod是一个不错的起点是正确的。这是一个表达式,如果$number
是偶数,则返回true;如果是奇数,则返回false:
$number % 2 == 0
例:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
输出:
甚至
另一种选择是简单的位检查。
n & 1
例如:
if ( $num & 1 ) {
//odd
} else {
//even
}
(bool)($number & 1)
要么
(bool)(~ $number & 1)
if (~string.indexOf("@")) {}
代替if (string.indexOf("@") !== -1) {}
。我更喜欢看到条件导致简单的对或错。但是,是的,这会使不熟悉此语法的人感到困惑。
另一种选择是检查最后一位是否为偶数:
$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
}
这是时间测试,以证明我的发现。
in_array
有时会跳动的mod运算符。
$num & 1
:) 的十进制版本。您也可以十六进制:array(0,2,4,6,8,A,C,E,F):D。
我做了一些测试,发现在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>";
我得到的结果非常一致。这是一个示例:
0.041879177093506 seconds mod
0.15969395637512 seconds is_int
0.044223070144653 seconds & operator
//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
此代码检查PHP中的数字是否为奇数或偶数。在示例$a
中2
,您得到的是偶数。如果需要奇数,则更改$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和空字符串自动转换为零。模也是如此。为此,代码
$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来让自己(和其他程序员)知道测试是预期的。
在不使用条件和循环语句的情况下检查偶数或奇数。
这对我有用..!
$(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>
我假设已经有一个计数器。在$ 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++;
}
总之,这为我提供了一种创建漂亮表的非常简单的方法。
警告,由于某些原因,此条件在for循环声明中不会评估为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";
}
}
$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';
//checking even and odd
$num =14;
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
if($even){
echo "Number is even.";
} else {
echo "Number is odd.";
}
在#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.";
}
}
?>