PHP - switch 語句



PHP 中的 switch 語句可以作為一系列針對相同表示式的 if…else 語句的替代方案。假設你需要將表示式或變數與許多不同的值進行比較,並根據它等於哪個值來執行不同的程式碼段。在這種情況下,你會使用多個 if…elseif…else 結構。

但是,這種結構可能會使程式碼變得相當混亂且難以理解。為了簡化此類程式碼,你可以使用 PHP 中的 switch case 結構,它提供了一種更緊湊的替代方案,以避免冗長的 if..elseif..else 程式碼塊。

下面的 PHP 指令碼使用了 if elseif 語句:

if ($x == 0) {
   echo "x equals 0";
} elseif ($x == 1) {
   echo "i equals 1";
} elseif ($x == 2) {
   echo "x equals 2";
}

你可以使用 switch case 語句獲得相同的結果,如下所示:

switch ($x) {
   case 0:
      echo "x equals 0";
   break;
   case 1:
      echo "x equals 1";
   break;
   case 2:
      echo "x equals 2";
   break;
}

switch 語句後跟一個表示式,該表示式會依次與每個 case 子句中的值進行比較。如果發現表示式與任何 case 匹配,則執行相應的語句塊。

  • switch 語句逐行執行花括號內的語句。

  • 如果找到一個 case 語句,其表示式的計算結果與 switch 表示式的值匹配,則 PHP 開始執行語句,直到 switch 塊結束,或者第一次遇到 break 語句。

  • 如果你沒有在 case 的語句列表末尾編寫 break 語句,PHP 將繼續執行下一個 case 的語句。

示例

嘗試透過刪除 break 語句來執行上面的程式碼。如果 x 的值為 0,你會發現輸出包括 "x equals 1" 和 "x equals 2" 行。

<?php
   $x=0;
   switch ($x) {
      case 0:
         echo "x equals 0 \n";
      case 1:
         echo "x equals 1 \n";
      case 2:
         echo "x equals 2";
   }
?>

它將產生以下 輸出

x equals 0
x equals 1
x equals 2

因此,務必確保每個 case 塊都以 break 語句結束。

switch 中的 default case

一個特殊的情況是 default case。此 case 匹配任何其他 case 未匹配的內容。使用 default 是可選的,但如果使用,它必須是花括號內的最後一個 case。

你可以組合多個 case 來模擬多個用 運算子組合的邏輯表示式。

<?php
   $x=10;
   switch ($x) {
      case 0:
      case 1:
      case 2:
         echo "x between 0 and 2 \n";
      break;
      default:
         echo "x is less than 0 or greater than 2";
   }
?>

要比較的值在 case 子句中給出。值可以是數字、字串,甚至是函式。但是,你不能在 case 子句中使用比較運算子(<,>,== 或 !=)。

你可以選擇在 case 子句中使用分號而不是冒號。如果沒有找到匹配的 case,並且也沒有 default 分支,則不會執行任何程式碼,就像沒有 if 語句為真一樣。

switch-endswitch 語句

PHP 允許使用替代語法,用 switch-endswitch 語句來界定 switch 結構。以下 switch case 版本是可以接受的。

<?php
   $x=0;
   switch ($x) :
      case 0:
         echo "x equals 0";
      break;
      case 1:
         echo "x equals 1 \n";
      break;
      case 2:
         echo "x equals 2 \n";
      break;
      default:
         echo "None of the above";
   endswitch
?>

在 Switch…Case 中使用 Break 語句

顯然,你不需要編寫 break 來終止 default case,因為它在 switch 結構中是最後一個 case。

示例

看看下面的例子:

<?php
   $d = date("D");

   switch ($d){
      case "Mon":
         echo "Today is Monday";
      break;

      case "Tue":
         echo "Today is Tuesday";
      break;
	  
      case "Wed":
         echo "Today is Wednesday";
      break;

      case "Thu":
         echo "Today is Thursday";
      break;

      case "Fri":
         echo "Today is Friday";
      break;

      case "Sat":
         echo "Today is Saturday";
      break;

      case "Sun":
         echo "Today is Sunday";
      break;

      default:
         echo "Wonder which day is this ?";
   }
?>

它將產生以下 輸出

Today is Monday
廣告