foreach 是兩種語言中遍歷陣列或集合的常用結構,但語法細節與適用範圍有明顯不同。
foreach 僅能作用於陣列與物件,若用於未初始化變數或非可遍歷類型會報錯。Iterable 的集合。本質是語法糖,編譯器會將其轉為迭代器或索引循環,無法完全取代傳統 for 循環。// 僅取值
foreach ($array as $value) { ... }
// 同時取鍵值
foreach ($array as $key => $value) { ... }
for (ElementType element : iterableObject) {
// 使用 element
}
<?php
$arr = ["1" => "張三", "2" => "李四", "3" => "王五"];
foreach ($arr as $key => $value) {
echo "$key => $value\n";
}
?>
輸出:
1 => 張三
2 => 李四
3 => 王五
int[] arr = {2, 3, 1};
for (int x : arr) {
System.out.println(x);
}
輸出:
2
3
1
| 特性 | PHP | Java |
|---|---|---|
| 鍵值獲取 | 原生支援 $key => $value | 需配合 Map.entrySet() 或索引 |
| 適用類型 | 陣列、實作 Traversable 的物件 | 陣列、實作 Iterable 的集合 |
| 修改原集合 | 參考傳遞,可直接修改 | 值傳遞(基本型別)或引用複製,修改元素屬性可行,但無法移除元素 |
理解差異有助於跨語言開發時避免常見陷阱。