上一篇提到了變數範圍以及超全域變數的使用方法後,接下來邏輯判斷、迴圈與運算子分為上篇與下篇,往邏輯判斷與運算子繼續邁進✨。
迴圈
for迴圈
常用於遍歷(Traversal)陣列、物件或者是重複執行流程一樣的事情,就可以使用 for 迴圈,使用方式需設定迴圈開始值、結束條件並搭配計次方式,適合用於確定執行次數時使用。
宣告方式:
for(設定變數初始值;條件式;變數計次方式){
statement;
}
<?php
$shelf = ["Coke", "Tea", "Water", "Milk", "Juice"];
for($i=0;$i<count($shelf);$i++){
echo $shelf[$i];
}
?>
/*輸出
Coke
Tea
Water
Milk
Juice
*/
foreach
foreach 是PHP中專門用來遍歷陣列或物件的語法。
可搭配索引陣列(value1, value2) ,每次循環的時候會把陣列的值指派給$value 。
也可以搭配關聯陣列(key => value) ,每次循環的時候會把陣列的值指派給$value,還會把鍵指派給$key。
宣告方式:
foreach ( 陣列 as $value ){
statement;
}
--------------------------------
foreach ( 陣列 as $key => $value ){
statement;
}
<?php
$cart = [120, 50, 30 ];
foreach($cart as $item => $price){
echo $item." item prices is ".$price;
}
/*輸出
0 item prices is 120
1 item prices is 50
2 item prices is 30
*/
--------------------------------------
<?php
$cart = ['Burger' => 120, 'Fries' => 50, 'Cola' => 30 ];
foreach($cart as $item => $price){
echo $item." prices is ".$price;
}
/*輸出
Burger prices is 120
Fries prices is 50
Cola prices is 30
*/
while
與 for 迴圈類似同樣用於重複執行流程一樣的事情,使用方式需先設定條件當條件符合(為True)執行一次迴圈內的程式碼之後,再判斷一次條件,直到條件不符合(為False),適合用於不確定執行次數時使用。
宣告方式:
while(condition){
statement;
}
<?php
$i = 0;
while ($i < 10) {
echo "數字: $i";
$i++;
}
?>
/*
數字: 0
數字: 1
數字: 2
數字: 3
數字: 4
數字: 5
數字: 6
數字: 7
數字: 8
數字: 9
*/
do/while
與 while 相反,先執行迴圈內程式碼,再判斷條件是否符合,符合再執行迴圈內程式碼,直到條件不成立。
宣告方式:
do{
statement;
}while(condition);
<?php
$i = 0;
do{
echo "數字: $i";//輸出0
$i++;
echo "數字: $i";//輸出1
}while($i>10);
?>
邏輯判斷
switch case vs match
switch
switch 語句用於根據不同的條件執行不同程式碼,與 if...elseif...else 結構相同,當有多個條件需要檢查同一個變數時,在這時候 switch 就非常好用比 if...elseif...else 更簡潔易讀。
宣告方式:
switch($expression){
case value1:
statement1;
break;
case value2:
statement2;
break;
case value3:
statement3;
break;
default:
statement4;
break;
};
在 switch case 裡,程式碼會由上往下執行,如果case的值與條件的值相同,則執行相對應動作,執行完畢遇到 break 跳出switch判斷式(沒有在case區塊後加上 break 會導致後續case區塊被執行(fall through)),如果case的值都與條件不符,可以在最後設定default,執行最終動作。
<?php
$grade = "A";
switch($grade){
case "A":
echo "Excellent";
break;
case "B":
echo "Good";
break;
case "C":
echo "not bad";
break;
case "D":
echo "bad";
break;
default:
echo "very bad";
break;
};//輸出Excellent
?>
match表達式
switch case 的加強版,比較一個值與多個條件,符合條件時回傳值,可用於結果賦值給變數或是直接輸出。
宣告方式:
match($expression){
condition1 => returnvalue1,
condition2 => returnvalue2,
condition3 => returnvalue3,
default => returnvalue4
};
相較於 switch case 的鬆散比較(==),match 則是採用嚴格比較(===),由於每個條件直接對應結果不需要 break 避免fall through。
在沒有 default 的情況下需要窮舉所有可能,否則會出現 Uncaught UnhandledMatchError。
<?php
$level = 'A';
$result = match ($level) {
'A' => "優秀",
'B' => "良好",
'C' => "待加強",
default => "未知",
};
echo $result;
if...else
依上往下執行,條件成立執行該程式碼區塊,反之繼續往下執行下一段程式碼。
if(condition){
statement1;
}
elseif(condition){
statement2;
}
else{
statement3;
}
假設想要在商城兌換禮品,目前商城只有兩個商品,10點換咖啡、20點換蛋糕,如果不夠的話兌換失敗,下次再來,可以透過下方的流程圖,更清楚地觀察點數兌換的判斷過程:

圖一 點數兌換判斷流程
<?php
$points = 10;
if($points >= 20){
echo "蛋糕兌換成功!";
}
elseif($points >= 10){
echo "咖啡兌換成功!";
}
else{
echo "積分不足";
}
?>
if 也可以單獨出現,或者是 if 與 else 搭配。
跳出迴圈指令
break
如同 switch 所演示,跳出程式區塊。
<?php
for($i=0;$i<10;$i++){
if($i==5){
echo "I dont want this!";
break;
}
else{
echo "I love it!";
}
}
?>/*輸出I love it! I love it! I love it! I love it!
I love it! I dont want this!
*/
continue
與 break 不同的是跳出當前迴圈,從下一個迴圈開始執行。
<?php
for($i=0;$i<3;$i++){
if($i==2){
continue;
echo "I dont want this!";
}
else{
echo "I love it!";
}
}
?>//輸出I love it! I love it!
goto
用來執行程式跳轉任務,跳轉到某一個位置執行程式碼,不過 goto 也不是隨隨便便都可以執行還是有一些限制,目標的位置需要在同個作用域和檔案,也就是無法跳出function或 class,也無法從外部跳入迴圈、function 和 switch case。
建議謹慎使用該語法,會讓程式碼難以閱讀以及流程難以追蹤、維護。
<?php
$hasTicket = false; //假設這個人沒票
if (!$hasTicket) {
goto error; //發現沒票,直接跳到 error 標籤
}
// 這裡是被跳過的內容
echo "歡迎光臨!這是你的號碼牌。";
echo "請往裡面走...";
// 定義標籤
error:
echo "抱歉,您沒有門票,不能進入!\n";
?>
本篇文章到這裡就結束了,先進廣告,不要走開馬上回來。
如果喜歡我的文章或覺得有用的話,歡迎動動手指點擊愛心,你/妳的支持是我最大的動力,我們下篇文章見🙌。













