PHP流程控制之分支結構switch語句的使用

分支結構switch語句的使用

還記得我們最開始講了這麼一個故事:

王同學家裡頭特別有錢,所以他的行程方式和正常人的又有些不一樣。

他的出行方式呢有6種,如下:

1,司機開車
2,民航
3,自己家的專機
4,火車動車
5,騎馬
6,遊輪


他的方式有6種,而骰子也真好有6面。所以,我們用if...elseif...的判斷方式可以實現,但是效率太低了。

還有其他更好的方式嗎?我們可以使用到一個方式就是:switch...case語法。

switch...case的語法結構如下:

<?php

switch(变量){    //字符串,整型

       case 具体值:
               执行代码;
               break;

       case 具体值2:

               执行代码2;
               break;

       case 具体值3:

               执行代码3;
               break;

       default:

}
?>

switch後放需要判斷的變量,而case後面是放結果。 switch後變值為多少,case的值寫的與switch變數執相同段的程式碼。

上面的break是可選的
上面的default也是可選的
不要在case 後面寫成分號,後面是冒號:
不要在case後面寫判斷區間,如($foo > 20 或$foo == 30)
switch裡面在變數最好是整型,字串,因為布林判斷比較適合if...else..


我們用流程圖來表示的話結果就如下圖所示:

2015-08-08_55c5a97fea497.png


#我們在上課時用到了rand函數,那我們現在來用rand實現王思總同學的​​問題選擇:

<?php
//定义出行工具
$tool=rand(1,6);

switch($tool){

   case 1:
       echo '司机开车';
       break;
   case 2:
       echo '民航';
       break;
   case 3:
       echo '自己家的专机';
       break;
   case 4:
       echo '火车动车';
       break;
   case 5:
       echo '骑马';
       break;
   case 6:
       echo '游轮';
       break;

}

?>

上面的程式碼我們只需要簡單修改,就可以實現我們在微信上面玩的一個小遊戲簡單的家務骰子和剪刀石頭布。你想想?

你再做實驗:
我們可以把 c​​ase 1 程式碼片段中的break去掉,你再試試,什麼效果?


我們再來寫一個簡單的星期判斷,寫法也可以變的怪一些喲:

<?php
//得到今天是星期几的英文简称
$day = date('D');

switch($day){
    //拿学校举例,我们让星期一、二、三是校长日
    case 'Mon':
    case 'Tue':
    case 'Wed':
        echo '校长日';
        break;

        echo '星期三';
        break;
    case 'Thu':
        echo '星期四';
        break;
    case 'Fri':
        echo '星期五';
        break;
    default:
        echo '周末,周末过的比周一到周五还要累<br />';
};
?>

自己做實驗試試:
上面的例子發現,不匹配的時候就執行了defaultk吧?

當然你也可以這樣,不過這種寫太太累了,沒有if...else比較簡單。我們不用swith...case來做true和false判斷

<?php
//用swith...case来完成bool判断
$bool=true;

switch($bool){
   case true:

   case false:


}


/*********分隔线*******************/
if($bool){


}else{


}
?>

世界上最癡心的等待就是我是case你是switch, 我一隻默默的等待,可是你卻不選我!


繼續學習
||
<?php //用swith...case来完成bool判断 $bool=true; switch($bool){ case true: case false: } /*********分隔线*******************/ if($bool){ }else{ } ?>