【发布时间】:2012-04-18 05:04:10
【问题描述】:
以下显示数组中的值的代码在包装在 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 个元素.) 我只是将代码缩减为一些简单的东西(作为我调试的一部分,就像在这里发布一样!)
一些进一步的信息:
- $arr 已通过 array_merge 创建了两个 91 元素数组以创建一个 182 元素数组。
- 我看到的行为只发生在第 91 个元素上 - 如果我回显 $arr[89]['circread_value'] 或 $arr[91]['circread_value'],我会从 foreach() 获得一致的值也是。
- 我在 foreach() 中看到的(看似随机的)值实际上是来自数组中其他元素的值(数组在开始 foreach 之前的样子)
输入数组($arr1 和 $arr2)可以在这里找到:http://pastebin.com/wQN8XXu2
感谢您的任何见解。不要犹豫,询问更多信息。
【问题讨论】:
-
有趣。
var_dump每次循环迭代的输出是什么? -
你是说你已经用你的数据运行了上面的exact代码,你看到了这个问题吗?
-
我是unable to repeat这个... PHP版本请
-
@DaveRandom 是的 - 我已经运行了这个确切的代码。看起来很奇怪吧?我会跳到“PHP 肯定是错误的”,但是危险信号警告我这更有可能是我的错误!
-
@DaveRandom 请注意,还有更多代码(用于设置数组等 - 它是大型站点的一部分)。数组内容与我在这里展示的不完全一样(因为有更多的子元素而不仅仅是 'blah',显然还有 182 个元素需要考虑。)我可以把这个发给你吗?