switch PHP
switch atau switch/case merupakan percabangan atau struktur kontrol yang mirip dengan serangkaian pernyataan if. Dalam beberpaa kasus terkadang kita perlu melakukan perbandingan sederhana antara variabel atau ekspresi dengan nilai-nilai tertentu, disinilah switch berguna.
switch cocok digunakan ketika kita memiliki sebuah variabel dan kita ingin melakukan aksi atau tindakan tertentu berdasarkan nilai dari variabel tersebut. Sama halnya seperti if, kita bisa memiliki beberapa aksi berdasarkan kondisi tertentu dan aksi default yang akan dieksekusi jika semua kondisi tidak terpenuhi.
Berikut beberapa topik terkait switch PHP yang akan kita bahas:
Sintaks
Berikut sintaks switch yang valid di PHP.
switch (nilai) {
case nilaiPembanding1:
aksi1
break;
case nilaiPembanding2:
aksi2
break;
case nilaiPembandingN:
aksiN
break;
default:
aksiDefault
break;
}
Penjelasan
nilai adalah nilai yang akan dibandingkan dengan nilai yang ada disebelah kanan kata kunci case dalam hal ini nilaiPembanding1, nilaiPembanding2, dan nilaiPembandingN.
Misalnya, jika nilai sama dengan nilaiPembanding1 maka aksi1 akan dieksekusi, jika tidak, interpreter akan memeriksa case lain dibawahnya secara berurutan, jika semua nilaiPembanding di case tidak sama dengan nilai, maka aksiDefault akan dieksekusi.
Jika nilai sama dengan nilaiPembanding di case, interpreter akan mengeksekusi aksi yang diblok case terkait, setelah aksi tersebut selesai dieksekusi dan dibawahnya ada kata kunci break interpreter akan keluar dari pernyataan switch tidak mengecek case lain.
Selama pernyataan switch di dalam aksi tertentu tidak memiliki kata kunci break, interpreter PHP akan terus mengeksekusi aksi di dalam case lain secara berurutan, tidak peduli nilainya.
Contoh
Katakanlah kita ingin mengkonversi hari dalam angka ke nama hari, misalnya angka 1 berarti hari senin, 2 berarti selasa dan seterusnya sampai 7 yaitu hari minggu.
Untuk tujuan ini kita bisa menggunakan switch, berikut contohnya:
$day = 7;
switch ($day) {
case 1:
echo "senin";
break;
case 2:
echo "selasa";
break;
case 3:
echo "rabu";
break;
case 4:
echo "kamis";
break;
case 5:
echo "jumat";
break;
case 6:
echo "sabtu";
break;
case 7:
echo "minggu";
break;
default:
echo "hari $day tidak ditemukan";
break;
}
// OUTPUT: minggu
Kode di atas akan menghasilkan output minggu karena nilai dari variabel $day sama dengan 7, oleh karena itu aksi echo "minggu" dieksekusi.
Di atas, kita hanya menangani kondisi ketika nilai $day berada dalam rentang 1-7, diluar dari itu aksi default yaitu echo "hari $day tidak ditemukan"; akan dieksekusi, silakan coba ubah nilai $day menjadi 8 atau nilai lain diluar rentang 1-7.
switch Tanpa break
Bagaimana jadinya jika switch tidak memiliki break di setiap aksinya? jika ini dilakukan interpreter akan memeriksa kondisi dibawahnya secara berurutan tidak peduli nilai pembandingnya hingga menemukan kata kunci break.
Mari kita buktikan.
$day = 2;
switch ($day) {
case 1:
echo "senin";
case 2:
echo "selasa";
case 3:
echo "rabu";
case 4:
echo "kamis";
case 5:
echo "jumat";
case 6:
echo "sabtu";
break;
case 7:
echo "minggu";
break;
default:
echo "hari $day tidak ditemukan";
break;
}
// OUTPUT: selasarabukamisjumatsabtu
Satu Aksi untuk Beberapa case
Pernyataan switch juga memungkinkan kita untuk melakukan satu aksi berdasarkan beberapa kondisi atau case.
Mari kita sedikit modifikasi contoh diatas. Misalnya, jika nilai adalah 1 sampai dengan 5 kami ingin mencetak output hari kerja sedangkan jika 6 sampai 7 kita ingin mencetak hari libur.
$day = 1;
switch ($day) {
case 1:
case 2:
case 3:
case 4:
case 5:
echo "hari kerja";
break;
case 6:
case 7:
echo "hari libur";
default:
echo "hari $day tidak valid";
break;
}
// OUTPUT: hari kerja
Dengan cara ini kita tidak perlu menulis aksi yang sama di setiap kondisi atau case.
Nilai Dibandingkan Secara Longgar
Nilai yang ada di dalam tanda kurung setelah kata kunci switch dibandingkan secara longgar menggunakan operator == (bukan ===) dengan nilai lain di setiap case.
Mari kita gunakan contoh kode diatas, dalam contoh dibawah, kami mengubah semua nilai pembanding dalam case ke string dan mendapatkan hasil yang sama.
$day = 1;
switch ($day) {
case '1':
case '2':
case '3':
case '4':
case '5':
echo "hari kerja";
break;
case '6':
case '7':
echo "hari libur";
default:
echo "hari $day tidak valid";
break;
}
// OUTPUT: hari kerja