Php 同一范围内的两个foreach具有相同的变量名(第一个使用引用)

Php 同一范围内的两个foreach具有相同的变量名(第一个使用引用),php,arrays,foreach,Php,Arrays,Foreach,我在PHP中遇到了一个非常有趣的关于foreach循环的问题。我在一个范围内声明了一个数组和两个非常相似的foreach循环 有趣的是,如果第二个foreach与第一个foreach使用相同的变量名,同时第一个foreach使用对数组项的引用,则第二个foreach无法正常工作 例如 那么$second_数组不包含一、二、三、四,而是包含一、二、三、三 有人能给我解释一下为什么会这样吗?因为我真的不知道,这两个变量应该有不同的作用域,它在没有引用的情况下工作得很好 //修复非常简单,除了明显地将

我在PHP中遇到了一个非常有趣的关于foreach循环的问题。我在一个范围内声明了一个数组和两个非常相似的foreach循环

有趣的是,如果第二个foreach与第一个foreach使用相同的变量名,同时第一个foreach使用对数组项的引用,则第二个foreach无法正常工作

例如

那么$second_数组不包含一、二、三、四,而是包含一、二、三、三

有人能给我解释一下为什么会这样吗?因为我真的不知道,这两个变量应该有不同的作用域,它在没有引用的情况下工作得很好

//修复非常简单,除了明显地将两个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;
}
手册页对此进行了说明:

警告

$value和最后一个数组元素的引用即使在 foreach循环。建议通过取消设置将其销毁

这里有一个非常好的答案:。

手册页对此进行了解释:

警告

$value和最后一个数组元素的引用即使在 foreach循环。建议通过取消设置将其销毁


这里有一个非常好的答案:。

您能为第一个循环填写正文,让我们看看它在做什么吗?你是否正在修改该循环中的$my_项?它按照我写的那样工作,例如,即使是空的实体,也不像人们期望的那样工作。例如,示例按照我测试过的帖子中的描述工作。你能为第一个循环填充实体,以便我们可以看到它在做什么吗?你是否在该循环中修改$my_项目?它按照我写的那样工作,例如,即使是空的实体,也不像人们期望的那样工作,例如,示例按照我测试过的帖子中的描述工作。谢谢!我认为$value只在它所属的foreach的内部范围内声明。。。PHP确实是一种有趣的语言。谢谢!我认为$value只在它所属的foreach的内部范围内声明。。。PHP确实是一种有趣的语言。
$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_array = array("one", "two", "three", "four");
foreach($my_array as &$my_item) {

}
unset($my_item);  //unset()

foreach($my_array as $my_item) {
  $second_array[] = $my_item;
}