mod adalah istilah singkatan umum untuk 'modulo', alias modular aritmatika
Marc B
1
Info lebih lanjut di sini termasuk: Untuk menentukan keanehan atau bahkan lebih cepat dan lebih efisien untuk menggunakan operator bitwise :&$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
ashleedawg
Jawaban:
557
Anda benar dalam berpikir mod adalah tempat yang baik untuk memulai. Berikut adalah ekspresi yang akan mengembalikan true jika $numbergenap, false jika ganjil:
Jika Anda menggunakan ini dalam loop atau jumlah besar, Anda mungkin ingin mempertimbangkan bitcheck yang disarankan oleh Arius2038, yang sangat cepat. Bitcheck adalah metode pilihan saya untuk cek ganjil / genap.
Martijn
Bekerja dengan baik, tetapi saya hanya ingin tahu apa logika di balik ini? Mengapa nilai true diberikan jika "10 == 0"?
snlan
Logikanya adalah bahwa bilangan genap mana pun dapat dibagi 2 tanpa sisa. Jika Anda menggunakan $ number% 10, dan $ number Anda adalah 20, itu akan mengembalikan true, tetapi tidak jika $ number Anda adalah 22. Anda dapat menggunakan $ number% 10 jika Anda mencoba untuk menemukan setiap item ke-10 dalam satu lingkaran misalnya .
crdunst
1
@Tim, jika 5% 2 = 1. Logika adalah 2 * 2 + 1 = 5. Bagaimana cara mendapatkan 2 di php?
Hendry Tanaka
1
@ Hendry - tepatnya apa yang kamu tanyakan? Bagaimana cara mendapatkan hasil bagi divisi sebagai bilangan bulat, atau ...? Jika itu yang Anda maksud, Anda hanya perlu memberi () hasilnya; lantai (5/2) = 2
Ini pasti akan menjadi cara tercepat ketika menggunakan bilangan bulat dalam bahasa seperti C, dengan margin besar. Adakah yang melakukan benchmark untuk menentukan apakah ini benar juga untuk PHP?
thomasrutter
1
Mungkin cara tercepat, jika mesin PHP dikodekan dengan baik.
Rolf
Saya akan mengatakan ini adalah cara tercepat dan paling lurus ke depan. Sempurna.
Saya yakin ini adalah operator bitwise, kecuali jika Anda tahu apa yang Anda lakukan dengan kemewahan itu, saya akan menghindari sintaksis ini.
danhere
1
Saya harus mengagumi sintaks, hal-hal yang bekerja tanpa mengetahui mengapa, memberi Anda pengingat betapa kecilnya kita di dunia fisika, matematika, dan, yah, tambahkan saja baris pada angka 1, bukan 2 ...
Jonas Lundman
Saya menggunakan operator bitwise di JS cukup sedikit. Misalnya if (~string.indexOf("@")) {}bukannya if (string.indexOf("@") !== -1) {}. Saya lebih suka melihat kondisi menghasilkan benar atau salah sederhana. Tapi ya, itu bisa sedikit membingungkan bagi orang yang tidak terbiasa dengan sintaks ini.
Martin James
7
Pilihan lain adalah untuk memeriksa apakah digit terakhir adalah bilangan genap:
$value ="1024";// A Number
$even = array(0,2,4,6,8);if(in_array(substr($value,-1),$even)){// Even Number}else{// Odd Number}
Atau untuk membuatnya lebih cepat, gunakan isset()alih-alih 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}
Kepada Downvoter: Bolehkah saya tahu mengapa Anda downvot?
Subin
4
Ini sangat mahal, dibandingkan dengan metode lain.
Grantwparks
@ grantwparks Nah, perbedaan antara menggunakan isset & mod hanya 0,5007 detik. Tapi, array_search sangat mahal.
Subin
2
@ grantwparks Saya telah memperbarui kode untuk menyertakan in_arrayoperator mod mana yang terkadang.
Subin
1
Cara berpikir yang menarik. Ini pada dasarnya versi desimal$num & 1 :). Anda juga bisa melakukannya heksadesimal: array (0, 2, 4, 6, 8, A, C, E, F): D.
Matthijs Wessels
5
Saya melakukan sedikit pengujian, dan menemukan bahwa antara mod, is_intdan &-operator, mod adalah yang tercepat, diikuti oleh & -operator.
is_inthampir 4 kali lebih lambat dari mod.
Saya menggunakan kode berikut untuk tujuan pengujian:
//for numbers n [0,1,2,3,4....]if((n+2)%2==1){//odd}else{//even}
Nol adalah angka genap. Dengan kata lain, paritasnya — kualitas bilangan bulat genap atau ganjil — adalah genap. Cara paling sederhana untuk membuktikan bahwa nol adalah genap adalah dengan mengecek apakah itu sesuai dengan definisi "genap": ini adalah kelipatan bilangan bulat dari 2, khususnya 0 × 2. Akibatnya, nol berbagi semua properti yang mencirikan angka genap: 0 dapat dibagi 2, 0 dikelilingi di kedua sisi dengan angka ganjil, 0 adalah jumlah bilangan bulat (0) dengan dirinya sendiri, dan satu set 0 objek dapat dibagi menjadi dua set yang sama. dari http://en.wikipedia.org/wiki/Parity_of_zero
Saya tidak mengerti. Mengapa (n + 2)% 2? Dalam kasus apa ia mengembalikan sesuatu yang berbeda dari n% 2?
Pierre-Olivier Vares
2
Kode ini memeriksa apakah angkanya aneh atau bahkan dalam PHP. Dalam contoh $aini adalah 2dan Anda mendapatkan nomor genap. Jika Anda perlu ganjil maka ubah $anilainya
$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 mengonversi null dan string kosong secara otomatis ke nol. Itu terjadi dengan modulo juga. Karenanya akan kode
$number %2==0or!($number &1)
dengan nilai $ number = '' atau $ number = null hasilnya benar. Saya mengujinya untuk yang agak lebih panjang:
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>";}}Theprintis there for testing purposes, hence in practice it becomes:function testEven($pArg){if(is_int($pArg)===true){return $pArg%2;}returnfalse;}
Fungsi ini mengembalikan 1 untuk setiap nomor ganjil, 0 untuk setiap angka genap dan false ketika bukan angka. Saya selalu menulis === benar atau === salah untuk membiarkan diri saya (dan programmer lain) tahu bahwa tes seperti yang dimaksudkan.
<!DOCTYPE html><html><head><scriptsrc="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><inputtype="text"name="num_even_odd"id="num_even_odd"placeholder="Enter Only Number"></td></tr><tr><th>Your Answer Is :</th><tdid="ans_even_odd"style="font-size:15px;color:gray;font-weight:900;"></td></tr><tr><td><inputtype="button"name="btn_even_odd"id="btn_even_odd"value="submit"></td></tr></table></body></html>
Saya membuat asumsi bahwa sudah ada counter. di $ i yang bertambah pada akhir loop, Ini bekerja untuk saya menggunakan permintaan steno.
$row_pos =($i &1)?'odd':'even';
Jadi apa yang dilakukan, baik itu menanyakan pernyataan yang kami buat pada dasarnya $ i adalah aneh, tergantung apakah itu benar atau salah akan memutuskan apa yang akan dikembalikan. Nilai yang dikembalikan mengisi variabel $ row_pos kami
Penggunaan saya ini adalah untuk menempatkannya di dalam foreach loop, tepat sebelum saya membutuhkannya, Ini membuatnya menjadi satu liner yang sangat efisien untuk memberi saya nama kelas yang sesuai, ini karena saya sudah memiliki penghitung untuk id untuk memanfaatkan nanti dalam program. Ini adalah contoh singkat tentang bagaimana saya akan menggunakan bagian ini.
<divclass='row-{$row_pos}'> random data <div>
Ini memberi saya kelas ganjil dan genap di setiap baris sehingga saya bisa menggunakan kelas yang benar dan menghapus hasil cetak saya di halaman.
Contoh lengkap dari apa yang saya gunakan perhatikan id memiliki penghitung diterapkan untuk itu dan kelas memiliki hasil ganjil / genap saya diterapkan padanya .:
Peringatan, untuk beberapa alasan, kondisi ini tidak mengevaluasi ke TRUE dalam deklarasi for loop , seperti yang ditunjukkan di bawah ini:
Di awal setiap iterasi, expr2dievaluasi. Jika mengevaluasi ke TRUE, loop berlanjut dan pernyataan bersarang dieksekusi. Jika mengevaluasi ke FALSE, eksekusi loop berakhir.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Jawaban:
Anda benar dalam berpikir mod adalah tempat yang baik untuk memulai. Berikut adalah ekspresi yang akan mengembalikan true jika
$number
genap, false jika ganjil:Berfungsi untuk setiap nilai PHP integer , lihat juga PHP Aritmatika Operator .
Contoh:
Keluaran:
sumber
Pilihan lain adalah pemeriksaan bit sederhana.
sebagai contoh:
sumber
Ya menggunakan mod
sumber
Meskipun semua jawaban itu baik dan benar, solusi sederhana dalam satu baris adalah:
antara:
atau:
bekerja dengan sangat baik.
sumber
atau
sumber
if (~string.indexOf("@")) {}
bukannyaif (string.indexOf("@") !== -1) {}
. Saya lebih suka melihat kondisi menghasilkan benar atau salah sederhana. Tapi ya, itu bisa sedikit membingungkan bagi orang yang tidak terbiasa dengan sintaks ini.Pilihan lain adalah untuk memeriksa apakah digit terakhir adalah bilangan genap:
Atau untuk membuatnya lebih cepat, gunakan
isset()
alih-aliharray_search
:Atau untuk membuatnya lebih cepat ( ketukan
mod operator
sesekali ):Inilah tes waktu sebagai bukti atas temuan saya.
sumber
in_array
operator mod mana yang terkadang.$num & 1
:). Anda juga bisa melakukannya heksadesimal: array (0, 2, 4, 6, 8, A, C, E, F): D.Saya melakukan sedikit pengujian, dan menemukan bahwa antara mod,
is_int
dan&
-operator, mod adalah yang tercepat, diikuti oleh & -operator.is_int
hampir 4 kali lebih lambat dari mod.Saya menggunakan kode berikut untuk tujuan pengujian:
Hasil yang saya dapatkan cukup konsisten. Berikut ini contohnya:
sumber
Semua angka genap dibagi 2 akan menghasilkan bilangan bulat
sumber
Nol adalah angka genap. Dengan kata lain, paritasnya — kualitas bilangan bulat genap atau ganjil — adalah genap. Cara paling sederhana untuk membuktikan bahwa nol adalah genap adalah dengan mengecek apakah itu sesuai dengan definisi "genap": ini adalah kelipatan bilangan bulat dari 2, khususnya 0 × 2. Akibatnya, nol berbagi semua properti yang mencirikan angka genap: 0 dapat dibagi 2, 0 dikelilingi di kedua sisi dengan angka ganjil, 0 adalah jumlah bilangan bulat (0) dengan dirinya sendiri, dan satu set 0 objek dapat dibagi menjadi dua set yang sama. dari http://en.wikipedia.org/wiki/Parity_of_zero
sumber
Kode ini memeriksa apakah angkanya aneh atau bahkan dalam PHP. Dalam contoh
$a
ini adalah2
dan Anda mendapatkan nomor genap. Jika Anda perlu ganjil maka ubah$a
nilainyasumber
PHP mengonversi null dan string kosong secara otomatis ke nol. Itu terjadi dengan modulo juga. Karenanya akan kode
dengan nilai $ number = '' atau $ number = null hasilnya benar. Saya mengujinya untuk yang agak lebih panjang:
Fungsi ini mengembalikan 1 untuk setiap nomor ganjil, 0 untuk setiap angka genap dan false ketika bukan angka. Saya selalu menulis === benar atau === salah untuk membiarkan diri saya (dan programmer lain) tahu bahwa tes seperti yang dimaksudkan.
sumber
Ini bekerja untuk saya ..!
sumber
Saya membuat asumsi bahwa sudah ada counter. di $ i yang bertambah pada akhir loop, Ini bekerja untuk saya menggunakan permintaan steno.
Jadi apa yang dilakukan, baik itu menanyakan pernyataan yang kami buat pada dasarnya $ i adalah aneh, tergantung apakah itu benar atau salah akan memutuskan apa yang akan dikembalikan. Nilai yang dikembalikan mengisi variabel $ row_pos kami
Penggunaan saya ini adalah untuk menempatkannya di dalam foreach loop, tepat sebelum saya membutuhkannya, Ini membuatnya menjadi satu liner yang sangat efisien untuk memberi saya nama kelas yang sesuai, ini karena saya sudah memiliki penghitung untuk id untuk memanfaatkan nanti dalam program. Ini adalah contoh singkat tentang bagaimana saya akan menggunakan bagian ini.
Ini memberi saya kelas ganjil dan genap di setiap baris sehingga saya bisa menggunakan kelas yang benar dan menghapus hasil cetak saya di halaman.
Contoh lengkap dari apa yang saya gunakan perhatikan id memiliki penghitung diterapkan untuk itu dan kelas memiliki hasil ganjil / genap saya diterapkan padanya .:
Singkatnya, ini memberi saya cara yang sangat sederhana untuk membuat tabel cantik.
sumber
Coba ini,
sumber
Peringatan, untuk beberapa alasan, kondisi ini tidak mengevaluasi ke TRUE dalam deklarasi for loop , seperti yang ditunjukkan di bawah ini:
Ini TIDAK berfungsi:
Ini TIDAK berfungsi:
Ini TIDAK berfungsi:
Ini berfungsi OK :
sumber
sumber
sumber
Coba yang ini dengan bidang #Input
sumber