【发布时间】:2016-05-13 12:47:20
【问题描述】:
有人可以解释为什么第二个 foreach 循环输出 ID = 2 的项目两次吗?
第一个循环中的“&”旨在更改真实对象而不是副本。当我将第二个循环中的字段名称 $value 更改为其他内容时,它按预期工作,但我想了解为什么会出现此输出。
$a = array("ID" => "1");
$b = array("ID" => "2");
$d = array("ID" => "3");
$c = array($a, $b, $d);
foreach ($c as &$value)
{
$value['foo'] = rand(0, 10000);
}
print_r($c);
foreach ($c as $value)
{
print_r($value);
}
输出:
Array
(
[0] => Array
(
[ID] => 1
[foo] => 5673
)
[1] => Array
(
[ID] => 2
[foo] => 5421
)
[2] => Array
(
[ID] => 3
[foo] => 149
)
)
Array
(
[ID] => 1
[foo] => 5673
)
Array
(
[ID] => 2
[foo] => 5421
)
Array
(
[ID] => 2
[foo] => 5421
)
【问题讨论】:
-
什么是
print_a()函数? -
因为
$value是一个参考。 -
重复问题
-
"print_a" 是我个人的 "print_r" 函数,它只是添加了 "
"-tags,所以输出在 webbrowser 中的格式很好。我只是将它编辑为“print_r”,因为它与问题无关。