我已经介入了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