【发布时间】:2014-07-15 23:16:23
【问题描述】:
我在 PHP 中的 foreach 循环中遇到了一个非常有趣的问题。我在一个范围内声明了一个数组和两个(非常相似的)foreach 循环。
有趣的是,如果第二个 foreach 使用与第一个相同的变量名并且(同时)第一个使用引用(对数组项),则第二个 foreach 无法正常工作。
例如
$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 循环的“项目属性”名称(例如 $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吗? -
它可以像我写的那样工作(例如,不像人们期望的那样),即使是空体(例如,示例按照帖子中的描述工作(我已经测试过))。