foreach 是 PHP 遍歷陣列最高效、最常用的語法結構。本文詳細解析其兩種語法形式、多維陣列處理、動態陣列應用與實戰範例,並說明為何它優於傳統 for/while 迴圈。
<?php
$arr = [1, 2, 3, 17];
foreach ($arr as $value) {
echo "值: $value\n";
}
// 輸出: 1, 2, 3, 17
?>
<?php
$arr = ["one" => 1, "two" => 2, "three" => 3];
foreach ($arr as $key => $value) {
echo "$key => $value\n";
}
// 輸出: one=>1, two=>2, three=>3
?>
<?php
$matrix = [
["a", "b"],
["y", "z"]
];
foreach ($matrix as $row) {
foreach ($row as $cell) {
echo "$cell ";
}
echo "\n";
}
// 輸出: a b / y z
?>
<?php
// 無需預先定義變數
foreach ([1, 2, 3, 4, 5] as $v) {
echo "$v ";
}
// 輸出: 1 2 3 4 5
?>
<?php
$nav = [
'首頁' => '/',
'產品介紹' => '/products',
'關於我們' => '/about',
'聯絡我們' => '/contact'
];
$count = count($nav);
$i = 0;
foreach ($nav as $label => $url) {
$isLast = (++$i === $count);
$class = $isLast ? 'class="active"' : '';
echo "<a href=\"$url\" $class>$label</a>";
if (!$isLast) echo " > ";
}
?>
| 特性 | foreach | for + count() | while + each() |
|---|---|---|---|
| 語法簡潔度 | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| 執行速度 | 最快 | 較慢(重複 count) | 慢 |
| 記憶體效率 | 佳 | 佳 | 需額外指標 |
| 關聯陣列支援 | 原生 | 需額外處理 | 原生 |
| 多維陣列處理 | 巢狀直觀 | 複雜 | 複雜 |
foreach ($arr as $v) 中修改 $v 不影響原陣列foreach ($arr as &$v) 可修改原值,**迴圈後務必 unset($v) 解除引用**each() 那樣控制內部指標位置foreach 作用於陣列**副本**(PHP 7+ 優化為引用計數),大陣列效能仍優於 for<?php
$arr = [1, 2, 3];
foreach ($arr as &$v) {
$v *= 2; // 修改原陣列
}
unset($v); // 重要:解除引用,避免後續誤用
print_r($arr); // [2, 4, 6]
?>
foreach ($arr as $key => $value)** 完整獲取資訊&$valueunset($value) 清理引用變數foreach 中 unset($arr[$key]) 刪除當前元素(會導致指標錯亂),改用 array_filter() 或建立新陣列count($arr) 或操作原陣列結構foreach 是 PHP 陣列操作的瑞士刀,掌握其特性與最佳實踐,能寫出更簡潔、高效、安全的代碼。