PHP 5 引入引用遍歷語法 foreach ($arr as &$value),允許直接修改原數組元素,避免了傳統按值拷貝的性能開銷與後續重新賦值的麻煩。
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr 變為 array(2, 4, 6, 8)
?>
<?php
// ❌ 錯誤:臨時數組表達式不可引用
foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}
// Fatal error: Cannot create references to elements of a temporary array expression
// ✅ 正確:先賦值給變量
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) { ... }
$arr = [1, 2, 3];
foreach ($arr as &$v) { $v *= 2; }
foreach ($arr as $v) { echo $v; } // 輸出 2 4 4 而非 2 4 6!
// 原因:$v 仍引用著 $arr[2],第二輪循環將 $arr[2] 覆蓋為 $arr[1] 的值
// 解決:循環後銷毀引用
unset($v);
unset($value) 釋放引用foreach 不再影響內部指針,行為更可預測