foreach ($array as $value) {
// 處理 $value
}
適用情境:只需要陣列值,不關心索引/鍵名。
內部行為:每次迴圈將當前元素值指派給 $value,陣列指標自動前移。
foreach ($array as $key => $value) {
// 可同時使用 $key 與 $value
}
適用情境:需要索引(數字鍵)或關聯鍵名(字串鍵)。
差異:額外將當前元素的鍵名指派給 $key 變數。
$colors = ['紅', '綠', '藍'];
foreach ($colors as $color) {
echo "$color
"; // 紅、綠、藍
}
foreach ($colors as $i => $color) {
echo "$i: $color
"; // 0: 紅、1: 綠、2: 藍
}
$book = [
'isbn' => '978-7-115-12345-6',
'title' => 'PHP 進階程式設計',
'price' => 89
];
foreach ($book as $field => $val) {
echo "$field => $val
";
}
// 輸出:
// isbn => 978-7-115-12345-6
// title => PHP 進階程式設計
// price => 89
foreach 操作的是陣列副本(PHP 7 起為複製引用),修改 $value 不影響原陣列foreach ($arr as &$v) { $v *= 2; } unset($v);array_walk() 或產生器 yield 節省記憶體// 錯誤:以為 $key 是計數器
foreach ($arr as $key => $val) {
echo $key; // 實際是陣列索引,不一定從 0 開始連續
}
// 正確:需連續編號時
$counter = 1;
foreach ($arr as $val) {
echo $counter++;
}