Transcript 條件判斷與迴圈
第四章 程式流程控制
條件控制
迴圈
1
4.1 流程控制的認識 (1)
在
PHP 中流程控制的指令分為兩類:條件控制 與 迴圈。
條件控制:根據關係運算或邏輯運算的條件式來判斷程式
執行的流程,依判斷的結果執行不同的程式區塊。條件控制
的指令包括:
if
if…else
if…elseif…else
switch
2
4.1 流程控制的認識 (2)
迴圈:根據關係運算或邏輯運算條件式的結果來判斷,
重複執行指定的程式區塊。迴圈指令包括:
while
do…while
for
foreach
3
4.2 if 條件控制
4.2.1
單向選擇 if:如果…就…
這是一個單向選擇的條件控制結構,這個條件控
制是最為單純的,也就是當判斷式成立時即執行區
塊中的程式碼。
語法格式
以下是單向選擇流程控制的流程圖:
4
單向選擇 if
程式範例
$A = 10 ;
$B = 5 ;
if ($A > $B ) {
echo “變數A 大於 變數B “;
}
echo "程式結束" ;
5
4.2.2 雙向選擇 if…else:如果…就…否則
就…
這是一個雙向選擇的條件控制結構。條件判斷時,當條件
成立時可以執行某個程式區塊,不成立時就執行另一個區塊
時,即可使用這個條件控制結構
語法格式
以下是雙向選擇流程控制的流程圖:
6
雙向選擇 if…else
程式範例
if($a > 0) {
echo '$a 變數的值是正數';
}else{
echo '$a 變數的值是負數';
}
7
4.2.3 多向選擇 if…elseif…else:如果…就…
如果…就…否則… (1)
當第一個條件成立時就執行指定的程式區塊,不然就看
第二個條件是否成立,成立時就執行指定的程式區塊,
以此類推,當所有的條件都不成立時,就執行最後一個
程式區塊。
8
4.2.3 多向選擇 if…elseif…else:如果…就…
如果…就…否則… (2)
語法格式
以下是多向選擇流程控制的流程圖
(以設定 3 個條件式
為例):
9
多向選擇 if…elseif…else
程式範例
if … elseif … 範例:
if ($A > $B) {
echo "$A > $B" ;
}elseif($A==$B){
echo "$A = $B" ;
}else {
echo "$A < $B" ;
}
10
4.3 switch 條件控制
也是一個多向選擇的條件控制,但是與 if / elseif /
else 不同的地方是 if 或 elseif 後都是以一個條件式做為判斷的
依據,而 switch 會定義一個自訂變數,而每一個執行區塊為
會以 case 並且帶一個值為開頭,當該值等於 switch 所定義的
變數時,即執行這個 case 中的程式區塊。
switch
語法格式
以下是 switch 多向選擇流程控制的
流程圖 (以設定 3 個方案為例):
11
4.3 switch 條件控制
程式範例
switch ($direction){
case "東":
echo "我要往東走";
break;
case "西":
echo "我要往西走";
break;
case "南":
echo "我要往南走";
break;
case "北":
echo "我要往北走";
break;
default:
echo "我不知道要往哪走";
}
12
4.4 迴圈
在程式流程控制中,另一個相當重要的結構就是迴圈。在
程式的某些區塊,會因為條件判斷或是設定次數的關係重複
執行,一直到不符合條件或達到設定次數後才往下執行,這
就是所謂的迴圈。
4.4.1
while 迴圈
while
迴圈是先設定條件,當符合條件時執行指定的程式,
一直到不符合條件時才跳出迴圈。
語法格式
以下是 while 迴圈流程控制的流程圖:
11
13
4.4.1 while 迴圈
程式範例
本範例利用 while 迴圈顯示由 1 到 10 的數字。
while ($i<10){
$i++;
echo $i.“ ”; // 為空白字元
}
14
4.4.2 do…while迴圈
迴圈幾乎是一樣的,只是
do…while迴圈是先執行迴圈中的程式,並在最後才設定條
件。當目前狀況仍符合條件時即繼續執行指定的程式區塊,
一直到不符合條件時才跳出迴圈。
語法格式
以下是 do…while 迴圈流程控制的流程圖:
do…while迴圈與while
15
4.4.2 do…while迴圈
程式範例
本範例利用 do…while 迴圈來顯示由 1 到 10 的數字。
do{
$i++;
echo $i.“ ”; // 為空白字元
}while ($i<10)
16
4.5 for 計次迴圈 (1)
所謂計次迴圈,就是設定一個有次數的條件,若程式在符
合條件的狀況下即執行迴圈內的程式,否則就跳出迴圈結束
或往下執行程式。
for
計次迴圈是先設定一個變數的初值,再設定該變數執行
計次的條件,最後設定變數的計次方式。當符合條件時即執
行指定的程式區塊後計次,一直到不符合條件時才跳出迴圈
結束程式或往下執行。
17
4.5 for 計次迴圈 (2)
語法格式
以下是 for 計次迴圈流程控制的流程圖:
18
4.5 for 計次迴圈 (2)
程式範例
本範例要顯示由 1 加到 10 的總和。
for ($i=1;$i<=10;$i++){
$countI += $i;
}
echo $countI;
19
FOREACH迴圈
foreach, 專門使用在陣列操作, 有二種格式分
如下:
1) foreach (array_expression as $value)
2) foreach (array_expression as $key =>
$value) 與後面的陣列設定值有關
兩者的差別在「index 值是否需要」。
20
FOREACH迴圈
FOREACH 格式-Type 1
foreach (陣列名稱 as $value){
迴圈敘述 ;
}
意義:每次迴圈依序將陣列元素的內容放入
$value 變數中, 直到陣列中每一個元素都執行一
次。
範例:
$month = array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug',
'Sep','Oct','Nov','Dec') ;
foreach ($month as $value)
echo "$value <br> " ;
21
FOREACH迴圈
FOREACH 格式-Type 2
foreach (陣列名稱 as $key => $value) {
迴圈敘述 ;
}
意義:除了會將陣列元素依序存入 $value 外,
也會將陣列指標 index 同時存入 $key 中。
22
FOREACH迴圈
FOREACH 格式-Type 2 範例
1: <html>
2: <title>Foreach</title>
3: <body>
4: <?php
5:
$A = array (0,10,20,30,40,50,60) ;
6:
foreach ($A as $key => $value){
7:
echo "\$A[$key] : " ;
8:
echo "$value <br> " ;
9:
}
10: ?>
11: </body>
12: </html>
23
4.6 流程控制的跳躍指令
程式設計有時需要將目前的執行動作直接跳出流程控制區
塊或是迴圈,執行下一輪的迴圈動作或向下執行程式,此時
就必須使用跳躍指令。
關於 break 與 continue
break 及 continue 就是流程控制中的跳躍指令,它們都能
停止目前的程式動作,不同的是 break 指令會跳出流程控
制區塊或是迴圈往下執行,而 continue 指令會跳出目前的
迴圈動作進行下一輪迴圈的執行。
24
作業一 簡易購物車
假設有三種商品,其名稱、價格如下:
php 入門書 $400
c 語言入門書 $ 550
資料結構原文書 $ 800
且有三種會員資格,分別會打不同的折扣如下:
金卡會員 7折
銀卡會員 8折
一般會員 95折
設計一個 purchase.html 頁面,讓使用者輸入「使用者名稱」、「購買數
量」、「會員資格」(單選)後,送出至 purchase.php 負責計算折扣後,
並列出: 使用者名稱、購買物品、會員資格,折扣,總金額等資料。
Due data: 二週後。
25