« 29. 如何撰寫 do...while 敘述? | (回到Blog入口) | 31. foreach 敘述的用法? »

30. 如何撰寫 for 敘述?

jollen 發表於 October 27, 2006 2:59 PM

for 迴圈敘述是一種有條件式的迴圈語法,for 與 while 或 do...while 不同的地方在於,for 可以指定迴圈開始與結束的條作,因此可以限定迴圈的次數。

for 迴圈敘述的語法:

for (EXPRESSION1; EXPRESSION2; EXPRESSION3) { statements; ... }

其中 EXPRESSION1 為最始條件,EXPRESSION2 為終止條件,EXPRESSION3 為迴圈結束後所要執行的 statement。請看底下的範例:

<?php for ($i = 0; $i <= 10 ; $i++) { echo "$i
"; } ?>

執行時,$i = 0 表示 $i 的初始值為 0;$i <= 10 表示當 $i <= 10 時,迴圈繼續執行;$i++ 表示每次執行一次迴圈裡的敘述後 $i 的值加 1。

$i++ 的寫法等於 $i = $i+1。這裡有 1 個重要的觀念要說是:EXPRESSION3 是在迴圈結束後才被執行,例如:

for ($i = 0; $i <= 10; $i++) { ... }

我們來看這個迴圈,當迴圈終止後,$i 的值為 11,而不是 10。這是因為 $i++ 的敘述是在迴圈裡的程式片斷執行完成後才被執行,然後再回到迴圈的開頭做 $i <= 10 的邏輯判斷,因為先遞增 1 後再進行條件判斷,所以 $i 最後跳出迴圈時的值為 11,而不是 10。

請讀者思考一點:因為 EXPRESSION3 是在迴圈結束時執行,所以才能確定迴圈裡的程式能看到正確的 $i 值。

另外,for 的 3 個參數也可以是空白的,例如:

<?php for ($i = 0;;) { if ($i > 10) break; $i++; } ?>

另外 EXPRESSION3 不一定是變數的增減值運算式 (expression),也有可能是其它 statement,配合多個 statement 使用時,只要以逗號 "," 分開即可。請看底下的範例:

for ($i = 0; $i <= 10; $i++) echo $i;

利用 expr3 是在迴圈結束時執行的statement的觀念,可以將這段程式改寫成:

for ($i = 0; $i <= 10; printf("%d ", $i), $i++); //輸出 0 1 2 3 4 5 6 7 8 9 10

但是如果寫成底下這樣,輸出的結果是不同的:

for ($i = 0; $i <= 10; $i++, printf("%d ", $i)); //輸出 1 2 3 4 5 6 7 8 9 10 11

答案很明顯,因為 EXPRESSION3 裡的 statements 也是照順序依序執行。因此,假如我們想要讓上面的程式的輸出與之前的相同,就要將程式修改成:

for ($i = 0; $i <= 10; $i, printf("%d ", $i++)); //輸出 0 1 2 3 4 5 6 7 8 9 10

另外,在這裡順帶解釋一下 echo 與 printf() 不同之處在於,echo 是 PHP 的命令,而 printf() 則是 PHP 的函數。

--jollen

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org