Kodealgo

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:

  1. Sintaks
  2. Contoh
  3. switch Tanpa break
  4. Satu Aksi untuk Beberapa case
  5. Nilai Dibandingkan Secara Longgar

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