PHP 4 引入 foreach,專為陣列遍歷設計,語法簡潔直觀。注意:僅能用於陣列,用於其他型別或未初始化變數會報錯。
// 僅取值
foreach ($array as $value) { ... }
// 同時取鍵與值
foreach ($array as $key => $value) { ... }
reset()。@ 抑制錯誤訊息。<?php
$arr = ["one", "two", "three"];
// 僅取值:等價寫法
reset($arr);
while (list(, $value) = each($arr)) {
echo "value: $value<br>\n";
}
foreach ($arr as $value) {
echo "value: $value<br>\n";
}
// 取鍵值:等價寫法
reset($arr);
while (list($key, $value) = each($arr)) {
echo "key: $key; value: $value<br>\n";
}
foreach ($arr as $key => $value) {
echo "key: $key; value: $value<br>\n";
}
?>
<?php
// 多維陣列巢狀遍歷
$a[0][0] = "a"; $a[0][1] = "b";
$a[1][0] = "y"; $a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
// 直接遍歷動態建立的陣列
foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>
語法:for (expr1; expr2; expr3) statement
expr1:迴圈開始前執行一次(初始化)。expr2:每次迴圈前判斷,true 繼續,false 結束。留空視為無限迴圈。expr3:每次迴圈結束後執行(通常用於遞增計數器)。<?php
// 1. 標準寫法
for ($i = 1; $i <= 10; $i++) { print $i; }
// 2. 條件判斷在迴圈內
for ($i = 1; ; $i++) {
if ($i > 10) break;
print $i;
}
// 3. 初始化與遞增移至迴圈外
$i = 1;
for (;;) {
if ($i > 10) break;
print $i;
$i++;
}
// 4. 將輸出與遞增放在 expr3
for ($i = 1; $i <= 10; print $i, $i++);
?>
for (expr1; expr2; expr3):
statement;
...
endfor;
語法:while (expr) statement
false 時,迴圈一次也不執行。<?php
// 標準寫法
$i = 1;
while ($i <= 10) { print $i++; }
// 替代語法
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>
語法:do { statement } while (expr);
do { ... } while(0); 配合 break 實現類似 goto 的結構化錯誤處理。<?php
$i = 0;
do {
print $i;
} while ($i > 0); // 第一次結束後 $i=0,條件為 false,結束
?>
<?php
do {
if ($i < 5) {
print "i is not big enough";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i is ok";
/* process i */
} while(0);
?>
| 迴圈類型 | 適用場景 |
|---|---|
| foreach | 遍歷陣列、物件屬性(首選) |
| for | 已知迴圈次數、需精確控制計數器 |
| while | 未知迴圈次數、依條件決定是否進入 |
| do-while | 至少需執行一次、資源釋放/錯誤處理模式 |