首頁 >後端開發 >php教程 >為什麼 PHP 引用的 Foreach 迴圈會出現意外行為?

為什麼 PHP 引用的 Foreach 迴圈會出現意外行為?

Barbara Streisand
Barbara Streisand原創
2024-12-13 12:57:10988瀏覽

Why Does PHP's Referenced Foreach Loop Exhibit Unexpected Behavior?

理解 PHP 引用的 Foreach 迴圈的奇怪行為

在 PHP 中,foreach 迴圈迭代數組或物件中的元素。但是,當在循環中使用引用時(例如 foreach ($a as &$v) { ... }),可能會發生意外行為。

問題

考慮以下PHP 腳本:

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
foreach ($a as $v) { }

print_r($a);

預期輸出:

預期輸出:

包含元素'a'、'b'、'c' 和'd' 的陣列。

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)

實際輸出:

解釋

出現意外行為是因為foreach 循環中創建的引用在循環終止後仍然存在。具體來說,$a 數組中的最後一個元素仍然可以被變數 $v 引用。 當第二個 foreach 迴圈運行時,$v(對 $a 中最後一個元素的引用)被重新賦值數組中每個元素的。由於 $v 是對 $a 中最後一個元素的引用,因此修改了對應的陣列元素。

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
unset($v);
foreach ($a as $v) { }

print_r($a);

要防止這種行為,請務必取消設定引用變數在foreach 循環之後完成:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)
輸出:

以上是為什麼 PHP 引用的 Foreach 迴圈會出現意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn