วิธีพื้นฐานที่ง่ายที่สุดในการตรวจสอบว่าตัวเลข / ตัวแปรแปลกหรือแม้กระทั่งใน 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'
คำตอบ:
คุณคิดถูกแล้ว mod เป็นจุดเริ่มต้นที่ดี นี่คือการแสดงออกซึ่งจะกลับจริงถ้าเป็นจริง$number
เท็จถ้าแปลก:
$number % 2 == 0
ธิสำหรับทุกจำนวนเต็มPHPค่าโปรดดูเช่นเดียวกับเลขคณิตประกอบ PHP
ตัวอย่าง:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
เอาท์พุท:
มันก็เป็นได้
อีกทางเลือกหนึ่งคือการตรวจสอบบิตง่าย ๆ
n & 1
ตัวอย่างเช่น:
if ( $num & 1 ) {
//odd
} else {
//even
}
ใช่ใช้ mod
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
ในขณะที่คำตอบทั้งหมดนั้นดีและถูกต้องทางออกที่ง่ายในหนึ่งบรรทัดคือ:
$check = 9;
ทั้ง:
echo ($check & 1 ? 'Odd' : 'Even');
หรือ:
echo ($check % 2 ? 'Odd' : '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 ของ beats ซึ่งบางครั้ง
$num & 1
:) คุณสามารถทำได้ด้วยเลขฐานสิบหก: อาร์เรย์ (0, 2, 4, 6, 8, A, C, E, F): D
ฉันทำการทดสอบนิดหน่อยและพบว่าระหว่าง mod is_int
และ&
-atorator mod นั้นเร็วที่สุดตามมาด้วย & -atorator
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
เลขคู่ทั้งหมดหารด้วย 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
}
ศูนย์คือเลขคู่ กล่าวอีกนัยหนึ่งความเท่าเทียมกันของมันคือคุณภาพของจำนวนเต็มที่เป็นเลขคี่หรือคู่ วิธีที่ง่ายที่สุดในการพิสูจน์ว่าศูนย์คือแม้กระทั่งการตรวจสอบว่ามันเหมาะกับคำจำกัดความของ "คู่": มันเป็นจำนวนเต็มคูณด้วย 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 จะเป็นจริง ฉันทดสอบมันเพื่อขยายค่อนข้างเพิ่มเติม:
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 สำหรับเลขคู่และใด ๆ ที่เป็นเท็จเมื่อไม่ใช่ตัวเลข ฉันมักจะเขียน === จริงหรือ === เท็จเพื่อให้ฉัน (และโปรแกรมเมอร์อื่น ๆ ) รู้ว่าการทดสอบมีวัตถุประสงค์
ตรวจสอบเลขคู่หรือคี่โดยไม่ใช้เงื่อนไขและคำสั่งวนรอบ
งานนี้สำหรับฉัน .. !
$(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>
สิ่งนี้ให้ฉันแปลกและแม้กระทั่งคลาสในแต่ละแถวเพื่อให้ฉันสามารถใช้คลาสที่ถูกต้องและแถบผลลัพธ์ที่พิมพ์ของฉันลงหน้า
ตัวอย่างแบบเต็มของสิ่งที่ฉันใช้ note 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++;
}
โดยสรุปนี่เป็นวิธีที่ง่ายมากในการสร้างตารางสวย
ลองนี้
$number = 10;
switch ($number%2)
{
case 0:
echo "It's even";
break;
default:
echo "It's odd";
}
คำเตือนด้วยเหตุผลบางประการเงื่อนไขนี้ไม่ได้ประเมินเป็น 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.";
}
}
?>