PHP 快速導覽 - switch 多重選擇

PHP 亦有提供多重選擇的控制結構,使用關鍵字 (keyword) switchcasedefault 的陳述 (statement) ,形式如下




簡單來說, switch 後頭接一小括弧,小括弧內為一常數運算式 (expression) ,計算出常數值若與其後 case 的位標 (label) 相符,就會執行該 case 的陳述。 case 的位標也可以是常數運算式,不過通常直接用常數值。


如下列程式,假設有一位元編碼儲存在字串 (string) $data 之中,程式累計 0 與 1 各自出現的數目
<?php
$data = '1001011011100011';
$one_count = 0;
$zero_count = 0;
for ($i = 0; $i < 15; $i++) {
    switch ($data[$i]) {
        case 0:
            $zero_count++;
            break;

        case 1:
            $one_count++;
            break;
    }
}
echo "There are $zero_count zeros and $one_count ones in data."

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:cf06.php
    功能:示範 PHP 程式 
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


執行結果如下



第 6 行
switch ($data[$i]) {


$data[i] 會取得該字串的第 $i 個元素值,此為常數運算式。


由於情況只有 0 與 1 ,因此上列程式只用 0 與 1 兩個位標。另外第 9 及第 13 行都有
break;


關鍵字 break 是用來暫時中斷程式的執行,放在迴圈內遇到 break 就會跳出迴圈,而在 switch 裡頭的位標後面則是可以不讓程式繼續往下檢查其他的位標,因為檢查到相符的位標,程式即可暫停,若是沒有用 break ,程式會持續執行到右大括弧 } ,也就是 switch 陳述結束的地方,這樣容易增加額外的程式執行時間。


以下程式計算字串中母音字母出現的次數,若非母音字母則用 default 位標執行另外的計算
<?php
$saying = "Never put off till tomorrow what you can do today.";
$aV = $eV = $iV = $oV = $uV = $other = $i = 0;
while ($i < strlen($saying)) {
    switch($saying[$i]) {
        case 'A':
        case 'a':
            $aV++;
            break;
                
        case 'E':
        case 'e':
            $eV++;
            break;
                
        case 'I':
        case 'i':
            $iV++;
            break;
            
        case 'O': 
        case 'o':
            $oV++;
            break;
            
        case 'U':
        case 'u':
            $uV++;
            break;
                
        default:
            $other++;
            break;
    }

    $i++;
}

echo "a: $aV, e: $eV, i, $iV, o: $oV, u: $uV, other: $other";

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:cf07.php
    功能:示範 PHP 程式 
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?$gt;


執行結果如下



default 位標下的 break 其實可有可無,但習慣上每個 case 都有給一個 break ,所以 default 後加上 break 只是相對看起來整齊而已。


case 的位標或 default 的出現順序並沒有強制規定,但習慣上, default 會放在最後面。


中英文術語對照
關鍵字keyword
字串string
運算式expression
位標label


您可以繼續參考
控制結構


相關目錄
回 PHP 快速導覽
回 PHP 教材
回首頁


參考資料
http://www.php.net/manual/en/control-structures.switch.php

沒有留言: