บทนำ
ถ้าโปรแกรมต้องการชุดคำสั่ง if หลายคำสั่งที่ดำเนินการต่างกันสำหรับค่าที่เปลี่ยนแปลงของนิพจน์ อาจได้โค้ดที่ซับซ้อนมากด้วยคำสั่ง if แต่ละอันที่มีวงเล็บปีกกาของตัวเอง นี่คือที่ที่การใช้คอนสตรัคต์ switch-case ทำให้โปรแกรมกระชับและอ่านง่าย ด้วย switch construct สามารถเปรียบเทียบตัวแปรเดียวกัน (หรือนิพจน์) กับค่าต่างๆ หลายค่า และดำเนินการโค้ตที่ต่างกันไป ขึ้นอยู่กับว่าค่าไหนตรงกัน
รูปแบบไวยากรณ์
switch (expr) { case val1: code to be executed if expr=val1; break; case val2: code to be executed if expr=val2; break; ... ... default: code to be executed if expr is not equal to any of above values; }
สำคัญที่ต้องให้คำสั่ง break หลังบล็อก case แต่ละอัน เพื่อไม่ให้โฟลว์โปรแกรมหล่นผ่าน case ที่เหลือ
ในตัวอย่างต่อไปนี้ ผู้ใช้ถูกขอให้ป้อนตัวเลขสองตัว และตัวเลขสำหรับประเภทการดำเนินการคณิตศาสตร์ 1/2/3/4 สำหรับบวก/ลบ/คูณ/หาร
ตัวอย่าง
<?php $first=(int)readline("enter a number"); $second=(int)readline("enter another number"); $x=readline("enter 1/2/3/4 for add/subtract/multiply/divide"); $result=0; switch($x){ case 1: echo $first+$second; break; case 2: echo $first-$second; break; case 3: echo $first*$second; break; case 4: echo $first/$second; break; default: echo "Incorrect input"; } ?>
ผลลัพธ์
Incorrect input
คีย์เวิร์ด default ใช้ระบุบล็อกคำสั่งที่จะดำเนินการถ้านิพจน์ switch ไม่ตรงกับ case เฉพาะเจาะจง
ถ้าบล็อก case ไหนว่างเปล่า จะส่งผ่านโฟลว์ไป case ถัดไป
ตัวอย่าง
<?php $x=(int)readline("enter a number"); switch($x){ case 1: case 2: echo "x is less than 3"; break; case 3: echo "x is equal to 3"; break; case 4: echo "x is greater than 3";break; default: echo "x is beyound 1 to 4"; } ?>
ผลลัพธ์
x is beyound 1 to 4
สามารถใช้ค่า string เพื่อเปรียบเทียบกับนิพจน์ switch ได้:
ตัวอย่าง
<?php $x=readline("enter a something.."); switch($x){ case "India": echo "you entered India"; break; case "USA": echo "You typed USA"; break; case "Mumbai": echo "you entered Mumbai";break; default: echo "you entered something else"; } ?>
ผลลัพธ์
you entered something else