我已經介入了PHP中foreach循環的一個非常有趣的問題。我有一個數組和兩個(非常相似)的foreach循環在一個範圍內聲明。在相同範圍內使用相同變量名稱的兩個foreach(以及使用引用的第一個變量名稱)
有趣的是,如果第二個foreach使用與第一個foreach相同的變量名稱,並且(如果第一個使用對數組項目的引用)(同時),它將無法正常工作。
E.g.
$my_array = array("one", "two", "three", "four");
foreach($my_array as &$my_item) {
}
foreach($my_array as $my_item) {
$second_array[] = $my_item;
}
然後$second_array
數組不包含"one", "two", "three", "four"
但實際上"one", "two", "three", "three"
。
有人可以向我解釋爲什麼嗎?因爲我真的不知道,這兩個變量應該有不同的範圍,當沒有使用引用時它工作得很好......
//修復很簡單,除了明顯地將兩個foreach循環合併爲其一,它也有助於改變其中一個foreach循環的'item property'名稱(例如$ my_item_1)。問題是,我不想修復它,我想了解它:)。編輯: 這工作正常。
$my_array = array("one", "two", "three", "four");
foreach($my_array as $my_item) {
}
foreach($my_array as $my_item) {
$second_array[] = $my_item;
}
這工作得很好。
$my_array = array("one", "two", "three", "four");
foreach($my_array as &$my_item) {
}
foreach($my_array as $my_item_1) {
$second_array[] = $my_item_1;
}
你可以填寫第一個循環的身體,這樣我們可以看到它在做什麼?你在那個循環中修改'$ my_item'嗎? –
即使是空的身體,它也可以像我寫的一樣工作(例如,不像人們所期望的那樣)(例如,這些示例的工作方式與帖子中描述的一樣(我已經測試過))。 – Petrroll