foreach (iterable $array as $value) { ... }
foreach (iterable $array as $key => $value) { ... }
Traversable 介面的物件(如 Iterator、Generator)。$value 不影響原陣列。foreach ($arr as &$value),結束後建議 unset($value) 解除參考。<?php
$employeeAges = [
"Lisa" => 28,
"Jack" => 16,
"Ryan" => 35,
"Rachel"=> 46,
"Grace" => 34,
];
foreach ($employeeAges as $name => $age) {
echo "Name: $name, Age: $age
";
}
/*
Name: Lisa, Age: 28
Name: Jack, Age: 16
Name: Ryan, Age: 35
Name: Rachel, Age: 46
Name: Grace, Age: 34
*/
?>
<?php
$nums = [1, 2, 3];
foreach ($nums as &$n) {
$n *= 2;
}
unset($n); // 重要:解除參考,避免後續誤用
print_r($nums); // [2, 4, 6]
?>
<?php
class User {
public $name = "Alice";
protected $email = "alice@example.com";
private $id = 1;
}
$user = new User();
foreach ($user as $key => $val) {
echo "$key => $val\n"; // 僅輸出 public 屬性:name => Alice
}
?>
<?php
function generateNumbers($max) {
for ($i = 0; $i < $max; $i++) {
yield $i;
}
}
foreach (generateNumbers(1000000) as $n) {
// 僅在需要時產生值,不佔用大量記憶體
if ($n > 5) break;
echo $n;
}
?>
<?php
$matrix = [
[1, 2, 3],
[4, 5, 6],
];
foreach ($matrix as $rowIndex => $row) {
foreach ($row as $colIndex => $value) {
echo "[$rowIndex][$colIndex] = $value\n";
}
}
?>
| 迴圈 | 適用場景 | 特性 |
|---|---|---|
foreach | 遍歷陣列/可迭代物件 | 語法簡潔、自動處理鍵值、支援參考修改 |
for | 已知次數、需索引運算 | 完全控制初始/條件/遞增 |
while | 未知次數、條件驅動 | 前置判斷,可能零次執行 |
do-while | 至少執行一次 | 後置判斷 |
foreach ($arr as &$v) ... 後必須 unset($v),否則後續迴圈 $v 仍參考最後一個元素。&,效能更好且安全。未來可結合 Fiber 實作非同步 foreach,目前生態系仍以同步為主。
foreach 是 PHP 處理集合資料最核心的工具,熟練掌握其參考傳遞、巢狀遍歷與 Generator 搭配,能寫出高效、可讀的資料處理邏輯。