Bir sayının / değişkenin tek mi yoksa PHP'de mi olduğunu öğrenmenin en basit yolu nedir? Mod ile ilgisi var mı?
Birkaç komut dosyası denedim ama .. google şu anda teslim etmiyor.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Bir sayının / değişkenin tek mi yoksa PHP'de mi olduğunu öğrenmenin en basit yolu nedir? Mod ile ilgisi var mı?
Birkaç komut dosyası denedim ama .. google şu anda teslim etmiyor.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Yanıtlar:
Modun başlamak için iyi bir yer olduğunu düşünmekte haklıydınız. İşte eğer doğruysa true $number
, garipse false döndürecek bir ifade :
$number % 2 == 0
Her tamsayı PHP değeri için çalışır , ayrıca Aritmetik Operatörler PHP'ye bakın .
Misal:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
Çıktı:
Eşit
Başka bir seçenek de basit bir bit kontrolüdür.
n & 1
Örneğin:
if ( $num & 1 ) {
//odd
} else {
//even
}
(bool)($number & 1)
veya
(bool)(~ $number & 1)
if (~string.indexOf("@")) {}
yerine if (string.indexOf("@") !== -1) {}
. Koşulların basit bir doğru veya yanlışla sonuçlanmasını tercih ederim. Ancak evet, bu sözdizimine aşina olmayan insanlar için biraz kafa karıştırıcı olabilir.
Başka bir seçenek, son basamağın çift sayı olup olmadığını kontrol etmektir:
$value = "1024";// A Number
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($value, -1),$even)){
// Even Number
}else{
// Odd Number
}
Ya da daha hızlı, kullanımı yapmak isset()
yerine 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
}
Veya daha hızlı yapmak için ( zaman zaman vuruşlarmod operator
):
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
// Even Number
}else{
// Odd Number
}
İşte bulgularıma kanıt olarak zaman testi .
in_array
bazen mod operatörü yener dahil kodu güncelledik .
$num & 1
:) ondalık sürümüdür . Ayrıca onaltılık yapabilirsiniz: dizi (0, 2, 4, 6, 8, A, C, E, F): D.
Biraz test yaptım ve mod is_int
ile &
-operator arasında modun en hızlı olduğunu gördüm, bunu & -operator izledi.
is_int
moddan yaklaşık 4 kat daha yavaştır.
Test amacıyla aşağıdaki kodu kullandım:
$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>";
Aldığım sonuçlar oldukça tutarlıydı. İşte bir örnek:
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
}
Sıfır, çift sayıdır. Başka bir deyişle, paritesi - bir tamsayının çift veya tek olma kalitesi - çifttir. Sıfırın eşit olduğunu kanıtlamanın en basit yolu, "çift" tanımına uyup uymadığını kontrol etmektir: 2'nin tam sayı katı, özellikle 0 × 2'dir. Sonuç olarak, sıfır, çift sayıları karakterize eden tüm özellikleri paylaşır: 0 2 ile bölünebilir, 0 her iki tarafta tek sayılarla çevrilidir, 0 kendisiyle bir tamsayının (0) toplamıdır ve 0 nesne kümesi iki eşit kümeye bölünebilir. dan http://en.wikipedia.org/wiki/Parity_of_zero
Bu kod, numaranın tek veya çift PHP olup olmadığını kontrol eder. Örnekte $a
olduğu 2
ve hatta sayı olsun. Eğer tuhaflığa ihtiyacınız varsa $a
değeri değiştirin
$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 ve boş bir dizeyi otomatik olarak sıfıra dönüştürür. Bu modulo ile de olur. Bu nedenle kod
$number % 2 == 0 or !($number & 1)
$ number = '' veya $ number = null sonuç true ile. Ben biraz daha genişletilmiş test:
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;
}
Bu işlev herhangi bir tek sayı için 1, çift sayı için 0 ve sayı olmadığında false döndürür. Kendime (ve diğer programcılara) testin amaçlandığı gibi olduğunu bildirmek için her zaman === true veya === false yazarım.
Kullanım Koşulları ve Döngü Bildirimi Olmadan Çift veya Tek Numarayı Kontrol Edin.
Bu iş benim için ..!
$(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>
Halihazırda bir sayaç bulunduğunu varsayıyorum. $ i bir döngü sonunda artırılır, Bu benim için bir steno sorgu kullanarak çalışır.
$row_pos = ($i & 1) ? 'odd' : 'even';
Peki bu ne yapar, iyi ya da yanlış ne döndürür karar verecek bağlı olarak $ i tuhaf özünde yaptığımız ifade sorgular. Döndürülen değer $ row_pos değişkenimizi doldurur
Bunu kullanmam, foreach döngüsünün içine yerleştirmem gerekiyor, buna ihtiyaç duymadan hemen önce, bu bana uygun sınıf isimlerini vermek için çok verimli bir astar yapar, çünkü zaten kimliklerin kullanması için bir sayacım var daha sonra programda. Bu, bu kısmı nasıl kullanacağımın kısa bir örneğidir.
<div class='row-{$row_pos}'> random data <div>
Bu bana doğru sınıfı kullanmak ve yazdırılan sonuçları sayfa aşağı şerit böylece her satırda garip ve hatta sınıflar verir.
Ne kullandığım tam örnek kimliği kimliği sayacı uygulanmış ve sınıf benim uygulanan tek / çift sonuç vardır .:
$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++;
}
özetle, bu bana güzel bir tablo oluşturmak için çok basit bir yol sağlar.
Bunu dene,
$number = 10;
switch ($number%2)
{
case 0:
echo "It's even";
break;
default:
echo "It's odd";
}
Uyarı, bazı nedenlerden dolayı, bu koşul, aşağıda gösterildiği gibi bir döngü bildiriminde TRUE olarak değerlendirilmez :
Her yinelemenin başında
expr2
, değerlendirilir. TRUE olarak değerlendirilirse, döngü devam eder ve iç içe ifadeler yürütülür. YANLIŞ olarak değerlendirilirse, döngünün yürütülmesi sona erer.
Bu mu DEĞİL çalışır:
for ($i=0; $i % 2 === 1 && $i < count($str); $i++){
// echo "-----------\n";
}
Bu mu DEĞİL çalışır:
for ($i=0; ($i % 2 === 1) && $i < count($str); $i++){
// echo "-----------\n";
}
Bu mu DEĞİL çalışır:
for ($i=0; ($i % 2) === 1 && $i < count($str); $i++){
// echo "-----------\n";
}
Bu işleri Tamam :
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 alanı ile bunu deneyin
<?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.";
}
}
?>