回 HTML跨平台行動網頁設計班 課程時間表

PHP:條件、迴圈、跳耀

條件

程式語言的三大邏輯:

  • 基本的「循序執行」:由上到下一行一行執行程式敘述。
  • 視情況的「條件判斷」:根據不同的條件來判斷後,執行不同的程式碼區塊。
  • 重複執行的「迴圈」:將一段程式碼重複執行某個次數。

「條件判斷」可以讓程式可以根據不同情況,來決定要執行的程式碼,因而可以根據不同需求來提供更多樣化的功能及結果。

PHP條件判斷的指令有四種:

  1. 單向判斷:if
  2. 雙向判斷:if...else
  3. 多向判斷:if...elseif...else
  4. 依變數值做多向判斷:switch


單向判斷式:「if」

語法格式:

if(條件式) 當條件式成立時要執行的程式敘述;

如果要執行的程式敘述不止一行,則必須使用大括號包圍:

if(條件式) 
{
    當條件式成立要執行的程式敘述1;
    當條件式成立要執行的程式敘述2;
    ...
    當條件式成立要執行的程式敘述n;
}

提示:

而當條件不成立時,條件式後面該行程式碼或是程式區塊則會被跳過不執行。

所謂的條件式成立指的是:

  • 比較運算得到的結果為True。
  • 邏輯運算得到的結果為True。
  • 非0的數字。
  • 非空字串。
  • 非空物件(不是null值)。

範例:

<?php
    $a = 9;
    
    if($a > 5) echo '條件成立<br/>';
    
    if($a === 8)
    {
        echo '條件成立Part2';
        $a++;
    }

    echo '$a='.$a;
?>

結果:

條件成立
$a=9

雙向判斷式:「if...else」

單向判斷式在條件不成立時會跳過程式碼不執行,而雙向判斷式除了可以在條件成立時,執行一段程式碼,也可以在條件不成立時,執行另外一段程式碼。

語法格式:

if(條件式) 
    當條件式成立時要執行的程式敘述;
else
    當條件式不成立時要執行的程式敘述;

如果要執行的程式敘述不止一行,則必須使用大括號包圍:

if(條件式) 
{
    當條件式成立要執行的程式敘述1;
    當條件式成立要執行的程式敘述2;
    ...
    當條件式成立要執行的程式敘述n;
}
else
{
    當條件式不成立要執行的程式敘述1;
    當條件式不成立要執行的程式敘述2;
    ...
    當條件式不成立要執行的程式敘述n;
}

範例:

<?php
    $account = 'Aaron';
    
    if($account === 'Aaron') 
        echo '登入成功<br/>';
    else
    {
        echo '登入失敗<br/>';
        echo '錯誤的使用者名稱<br/>';
    }

    $a = -3;

    if($a > 0)
    {
        echo '$a是正數<br/>';
    }
    else
    {
        echo '$a是負數<br/>';
        $a *= -1;
    }

    echo '$a='.$a;
?>

結果:

登入成功
$a=3

多向判斷式:「if...elseif...else」

多項判斷可以由上到下提供多個判斷式,當第一個判斷是成立時則執行第一個程式區塊,其它則忽略,且之後的判斷式都不會再被執行做判斷;第一個判斷式如果不成立,則會執行第二個判斷式,如果成立,則會執行第二個程式區塊,且之後的判斷式都不會再被做判斷,依此類推;如果全部的判斷式都不成立,則會執行最後一個else程式區塊。

語法格式:

if(條件式一) 
    當條件一式成立時要執行的程式敘述;
elseif(條件式二) 
    當條件二式成立時要執行的程式敘述;
.
.
.
elseif(條件式n) 
    當條件n式成立時要執行的程式敘述;
else
    當所有條件式皆不成立時要執行的程式敘述;

如果要執行的程式敘述不止一行,則必須使用大括號包圍:

if(條件式一) 
{
    當條件式ㄧ成立要執行的程式敘述1;
    當條件式ㄧ成立要執行的程式敘述2;
    ...
    當條件式ㄧ成立要執行的程式敘述n;
}
elseif(條件式二) 
{
    當條件式二成立要執行的程式敘述1;
    當條件式二成立要執行的程式敘述2;
    ...
    當條件式二成立要執行的程式敘述n;
}
.
.
.
elseif(條件式n) 
{
    當條件式n成立要執行的程式敘述1;
    當條件式n成立要執行的程式敘述2;
    ...
    當條件式n成立要執行的程式敘述n;
}
else
{
    當所有條件式皆不成立要執行的程式敘述1;
    當所有條件式皆不成立要執行的程式敘述2;
    ...
    當所有條件式皆不成立要執行的程式敘述n;
}
提示:在多項判斷式內,所以條件都不成立時的else區塊是可有可無的。

範例:

<?php
    $score = 60;
    
    if($score == 100)
    {
        echo '滿分';
    }
    elseif($score < 100 && $score >= 60)
    {
        echo '及格';
    }
    elseif($score < 60 && $score > 0)
    {
        echo '不及格';
    }
    else
    {
        echo '沒有分數';
    }
?>

結果:

及格

依變數值做多向判斷:「switch」

有時候,程式會根據某個變數內的值的不同而需要做不同的處理,這時用switch判斷式來處理會比較簡潔,switch本身也是一種多向的判斷式,但一般只能用來判斷某個變數值為何。

語法格式:

swtich(變數)
{
case 條件值1:
    變數值和條件值1相等時要執行程式碼;
    break;

case 條件值1:
    變數值和條件值1相等時要執行程式碼;
    break;
.
.
.
case 條件值n:
    變數值和條件值n相等時要執行程式碼;
    break;

default:
    所有條件值都不成立時會執行的程式區碼;
}

注意:

  • switch指令內的變數型態必須和case後面的條件值型態一樣才能做比較。
  • 每個case條件值和default指令後面要加上冒號「:」。
  • 每個case區塊要執行的程式敘述最下面要加上break,有break才會跳離該switch判斷式,否則程式碼會往下一個case區塊繼續執行,直到遇見break或整個switch的判斷式最後。
  • default區塊不一定要放在最下面。
  • default區塊不是必要的,也可以不使用它。

範例:

<?php
    // 某個算命程式的程式片段
    $luck = rand(1, 5);  // 取得隨機1~5之間的亂數

    switch($luck)
    {
    case 1:
        echo '你今天會發一點小財。';
        echo '<br/>';
        break;

    case 2:
        echo '你今天會有桃花運。';
        echo '<br/>';
        break;

    case 3:
        echo '你今天會受到表揚。';
        echo '<br/>';
        break;

    case 4:
        echo '你今天會被公司升職。';
        echo '<br/>';
        break;

    case 5:
        echo '你今天會很快樂。';
        echo '<br/>';
        break;

    default:
        echo '不明的錯誤';
        echo '<br/>';
    }
?>
執行結果將根據取得的亂數數值而有所不同。

迴圈

在程式當中,迴圈用來根據條件式或設定好的次數來重複執行某一段程式碼,直到條件是不成立或達到設定的次數,完成迴圈的執行,程式碼才會繼續往下執行。迴圈的架構可以減少需要重複行的程式碼。

PHP迴圈指令有四種:

  1. for迴圈:根據設定的次數來執行的迴圈。
  2. while迴圈:條件式成立會一直重複執行的迴圈。
  3. do...while迴圈:不管條件式成不成立,都至少會執行一次的迴圈。
  4. foreach迴圈:用來處理陣列的迴圈。


for迴圈

for迴圈為可以設定執行次數的迴圈,該迴圈敘述分為三個結構:「初始化變數」、「判斷變數值」、「改變變數內容」。

當變數初始化後,接著會「判斷變數內容」是否合乎條件,如果合乎條件,則執行迴圈內容,執行完後接著會進行「改變變數內容」,改變完後接著再次進行「判斷變數值」,如果變數值仍合乎條件,則再次執行迴圈內容,迴圈內容執行完再次「改變變數內容」,週而復始,直到「判斷變數內容」不成立後,迴圈結束,程式繼續往下執行;而「初始化變數」只會在迴圈一開始被執行一次而已。

語法格式:

for(初始化變數 ; 判斷變數值 ; 改變變數內容) 
{
    // 迴圈程式區塊
    程式敘述1;
    程式敘述2;
    ...
    程式敘述n;
}

範例一:

<?php
    // 執行5次的迴圈,每次執行都會顯示一行字串到網頁上
    for($i = 1 ; $i <= 5 ; $i++)
        echo "迴圈執行第".$i."次。<br/>";
?>

範例二:

<?php
    $sum = 0;

    // 執行10次的迴圈,計算從0累加到9的總和
    for($i = 0 ; $i < 10 ; $i++)
    {
        $sum += $i;
    }

    echo "總和為:".$sum;
?>


while迴圈

while只需要設定條件式,只要條件式成立,便會一直重複執行迴圈內程式碼,一直到條件式不成立,才會離開迴圈程式碼,繼續往下執行。

語法格式:

while(條件式) 
{
    // 迴圈程式區塊
    程式敘述1;
    程式敘述2;
    ...
    程式敘述n;
}

注意:

  • 當條件式一開始就不成立時,則迴圈內程式碼一次都不會執行。
  • 須注意,如果沒有變更條件式的判斷內容,條件式將一直成立,這會造成無窮迴圈,程式將因為記憶體耗盡而執行錯誤。

範例:

<?php
    $run = rand(0, 1);
    while($run != 1)
    {
        $run = rand(0, 1);
        echo "while...<br/>";
    }
?>
提示:while迴圈通常用在無法事先知道執行次數的場合。

do...while迴圈

do...while迴圈與while迴圈幾乎相同,唯一的差別在do...while迴圈會先執行一次迴圈本體後再做條件判斷是否要重複執行。

語法格式:

do 
{
    // 迴圈程式區塊
    程式敘述1;
    程式敘述2;
    ...
    程式敘述n;
}while(條件式);
注意:do...while迴圈的判斷式最後必須加上分號「;」來當作迴圈結束,且無法省略大括號,但while迴圈如果迴圈本體只有一行程式敘述,則可以省略大括號。

範例:

<?php
    $run = rand(0, 1);
    do
    {
        $run = rand(0, 1);
        echo "while...<br/>";
    }
    while($run != 1)
?>
和上一個while迴圈相比,這裏的do...while迴圈執行結果至少都會出現一次「while...」字串。

foreach迴圈

將在介紹陣列時再一併介紹。

跳耀

跳耀指令有三種:

  1. break:跳出目前迴圈或switch判斷式的程式區塊。
  2. continue:在程式區塊內,忽略下面還沒執行的程式碼並跳回開頭重新執行。
  3. goto:跳到指定的地方執行程式碼。

break

break指令可以用來跳出迴圈,中斷迴圈的執行。

範例:

<?php
    $a = 0;

    while(1)  // 一個無窮迴圈
    {
        $a++;

        if($a == 5) break; // 當變數$a為5的時候,透過break跳離迴圈

        echo $a.'<br/>';
    }
    
    echo '迴圈已跳離.';
?>

結果:

1
2
3
4
迴圈已跳離.while...
提醒:break無法使用在if、if...else、if...elseif...else條件判斷式內。

continue

continue指令可以用來忽略迴圈程式區塊為執行的程式碼,而跳回迴圈開頭,重新執行判斷式。

範例:

<?php
    // 顯示從0~9之間的奇數
    for($i = 0 ; $i < 10 ; $i++)
    {
        if($i % 2 == 0) continue; // 當變數$i除以2的餘數為0時,則忽略接下來的程式碼並回到迴圈開頭重新執行

        echo $i.'<br/>';
    }
?>

結果:

1
3
5
7
9
提醒:continue無法使用在if、if...else、if...elseif...else、switch條件判斷式內。

goto

goto指令可以用來跳到指定的地方執行程式碼,該指定的位置可以透過定義名字加上冒號「:」當作標記。

goto指令的限制:

  • 只能在同一個檔案內跳耀,無法跳到其它檔案的標記。
  • 無法跳出函數、類別方法,也無法跳進函數、類別方法。
  • 無法跳入任何迴圈或switch判斷式當中,但可以跳出。

範例:

<?php
    // 顯示1~10之間的偶數
    $a = 0;
start:
    if(++$a > 10)
        goto end;

    echo $a % 2 ? '' : "$a".'<br/>';

    goto start;
end:
    echo '執行結束';
?>

結果:

2
4
6
8
10
執行結束

作業

建立一個新的HTML網頁,檔名為:MyPHP_20150522_{座號}.html,座號請用0補足兩位數

  1. 網頁上有<h1>標籤的標題,文字為[你的座號]-[你的姓名]
  2. 網頁上有<h3>標籤的標題,文字為:2015年5月22日 作業
  3. 網頁上有一表單,表單使用GET,並且action為MyPHP_20150522_{座號}.php
  4. 表單內有一個input欄位,可以讓使用者個輸入一個數字,並提醒使用者數字只能是10~100之間的整數。
  5. 表單內還有一個submit按鈕,用來送出表單資料。


建立一個新的PHP網頁,檔名為:MyPHP_20150522_{座號}.php,座號請用0補足兩位數

  1. 請用PHP在網頁上輸出<h1>標籤的標題,文字為[你的座號]-[你的姓名]
  2. 請用PHP在網頁上輸出<h3>標籤的標題,文字為:2015年5月22日 作業
  3. 接收來自表單的數字。
  4. 如果使用者輸入的數字小於10或大於100請僅顯示錯誤訊息即可,並告知數字過大或過小。
  5. 如果接收的數字合乎條件,請將接收的數字從10~該數字之間的質數顯示出來將顯示所有質數的總和