以下代码显示数组中的值,当包含在foreach()中时,与使用简单的for循环时相反,会显示不同的结果。 for循环显示正确的数据,但foreach()似乎在每次迭代时修改输入数组。
$arr = array_merge($arr1, $arr2);
for ($x = 0; $x < count($arr); $x++) {
echo $arr[90]['circread_value'];
}
foreach ($arr as $unused) {
echo $arr[90]['circread_value'];
}
for循环的输出是一遍又一遍的相同值(如预期的那样):
1382429.00
1382429.00
1382429.00
1382429.00
...
foreach()的输出显示数组中的第91个元素随每次迭代而变化:
56256.00
45652.00
50726.00
317896.00
...
这怎么可能?
注意:我知道上面的代码是设计的(显然在foreach()中我实际上想要进一步处理并引用我正在迭代的数组的每个元素,而不仅仅是查看第91个元素。)我简单地将代码简化为简单的东西(作为调试的一部分,就像在这里发布一样!)
进一步的信息:
可在此处找到输入数组($ arr1和$ arr2):http://pastebin.com/wQN8XXu2
感谢您的任何见解。不要犹豫,要求提供进一步的信息。
答案 0 :(得分:0)
foreach修改了内部数组指针,但是没有,因为它希望你提供一个整数偏移量,如http://us3.php.net/manual/en/control-structures.foreach.php
所示。“由于foreach依赖于内部数组指针,因此在循环中更改它可能会导致意外行为。”
答案 1 :(得分:0)
你的代码兄弟有问题。
我刚刚tested this:
$arr = array(
0 => array('blah' => 123.42),
1 => array('blah' => 5488.87),
90 => array('blah' => 669874.923)
);
for ($x = 0; $x < count($arr); $x++) {
echo $arr[90]['blah'] . PHP_EOL;
}
foreach ($arr as $unused) {
echo $arr[90]['blah'] . PHP_EOL;
}
输出正常:
669874.923
669874.923
669874.923
669874.923
669874.923
669874.923
你介意向我们展示一些你的代码吗?
答案 2 :(得分:0)
发现问题。数组的第91个元素实际上是数组的引用。 foreach然后使用相同的变量名称(引用相同的数组 - 在我在问题中给出的示例代码段中名为$ unused),因此两者都在查看相同的数组。
我们注意到了“&amp;”在你为这些人发布之后在数组转储中,所以StackOverflow帮助我们的调试过程...感谢每个人的输入。