一個完整程式的執行通常都是為了解決一個特定的問題,而問題可以被拆解成為步驟,每個步驟都包含一些程式指令,這些指令可能只是一個運算的結果,也可能是一個判斷或邏輯處理的結果。
PHP程式會由檔案的第一行開始順序執行,中間遇到不同的指令可能產生不同的執行步驟變化,這個過程我們稱流程控制。
在PHP中主要的流程控制指令有三類:
- 選擇結構
- 重覆結構
- 巢狀結構
選擇結構
選擇結構會依據某個特定的條件是否成立來決定一個二選一或是多選一的結果。
if…else
if判斷式是最基本的選擇結構,主要是用在二選一的場景中,判斷的依據是條件是否成立,如果成立則會得到一個 true(真) 的結果,如果不成立則會得到一個 false(假) 的結果,程式會根據真和假的狀況去執行不同的程式碼區段
語法格式:
1 | if(條件式){ //注意條件式必能返回true 或 false的結果, |
語法範例:
1 |
|
switch…case
多選的結構是由if結構變化而來的,其用法是依據條件的值來做選擇,因此和if不同的是,switch的條件結果必須有明確的值,才能建立選擇的依據;
語法格式:
1 | switch(條件公式){ //注意條件公式必須要能產生一個明確的值 |
語法範例:
1 |
|
三元運算子
三元運算子本身除了是運算子也是一種選擇結構
語法格式:
1 |
|
語法範例:
1 | $level=($score>=60)?'及格':'不及格'; |
重覆結構
重覆結構是為了解決程式運行中需要大量重覆執行的作業,依據重覆的次數明確與否,可以分成幾種類型
for loop
語法格式:
1 | /* |
語法範例:
1 |
|
while / do…while
語法格式:
1 | /* |
語法範例:
1 | $score=10; |
foreach
語法格式:
1 | /* |
語法範例:
1 | $score=[60,22,72,10,80]; |
巢狀流程控制
有時問題一旦變得複雜時,單一流程結構不一定能解決問題,這時我們可能會在流程結構中再加上相同或不同的流程結構,這樣的程式狀態就叫做巢狀流程控制。
雖然理論上巢狀結構可以無限層的去執行,但只要巢狀的層級太多,往往也會造成日後維護及閱讀的不方便,因此在使用巢狀結構時,一定要控制好層級不要太多,或是思考別的做法來降低或簡化巢狀結構的複雜度。
1 |
|
流程結構練習
判斷成績及格學生
- 給定一個成績數字,判斷是否及格(60)分
分配成績等級
- 給定一個成績數字,根據成績所在的區間,給定等級
- 0 ~ 59 => E
- 60 ~ 69 => D
- 70 ~ 79 => C
- 80 ~ 89 => B
- 90 ~ 100 => A
依據學生成績等級給予評價
- 根據學生不同的成績等級在網頁上印出不同的文字評價
閏年判斷,給定一個西元年份,判斷是否為閏年
- 地球對太陽的公轉一年的真實時間大約是365天5小時48分46秒,因此以365天定為一年 的狀況下,每年會多出近六小時的時間,所以每隔四年設置一個閏年來消除這多出來的一天。
- 公元年分除以4不可整除,為平年。
- 公元年分除以4可整除但除以100不可整除,為閏年。
- 公元年分除以100可整除但除以400不可整除,為平年。
使用for迴圈來產生以下的數列
- 1,3,5,7,9……n
- 10,20,30,40,50,60……n
- 3,5,7,11,13,17……97
九九乘法表
- 以表格排列的九九乘法表
- 以交叉計算結果呈現的九九乘法表
尋找字元(使用while)
- 給定一個字串句子
- 給定一個單字或字母
- 尋找相符的內容
- 印出尋找到的單字或字母所在句子中的位置
以 * 符號為基礎在網頁上排列出下列圖形:
- 直角三角型
- 倒直角三角型
- 正三角型
- 菱型
- 矩形
- 內含對角線的矩形