Why php iteration by reference returns a duplicate last record?(为什么通过引用的php迭代返回重复的最后一条记录?)
问题描述
我刚刚花了 2 个小时寻找一个错误,该错误显然来自具有 &value 的 foreach 迭代.我有一个多维数组,运行时:
I just spent 2 hours hunting a bug which apparently comes from a foreach iteration with &value. I have a multidimentional array and when a ran this:
foreach($arrayOfJsonMods as &$item){
//TODO memcached votes
}
并且 PHP 返回了一个具有相同元素计数的数组,但最后一条记录是重复的.这个结构有什么我不明白的地方吗?
and PHP returned an array with the same element count, BUT with a DUPLICATE last record. Is there something i don't understand about this structure?
我在另一台机器上运行代码,结果是一样的.
I ran the code on a different machine, and the result was the same.
推荐答案
我猜你在这里重用 &$item
而且你是偶然发现已被报告为错误一千次但引用的正确行为的行为,这就是 手动建议:
I'll guess that you're reusing &$item
here and that you're stumbling across a behavior which has been reported as bug a thousand times but is the correct behavior of references, which is why the manual advises:
即使在 foreach 循环之后,对 $value 和最后一个数组元素的引用仍然存在.建议通过 unset() 销毁.
Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
foreach($arrayOfJsonMods as &$item)
{
//TODO memcached votes
}
unset($item);
参见https://bugs.php.net/bug.php?id=29992
这篇关于为什么通过引用的php迭代返回重复的最后一条记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么通过引用的php迭代返回重复的最后一条记录?
- 没有作曲家的 PSR4 自动加载 2022-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 如何定位 php.ini 文件 (xampp) 2022-01-01
- Laravel 仓库 2022-01-01
- SoapClient 设置自定义 HTTP Header 2021-01-01
- PHP Count 布尔数组中真值的数量 2021-01-01
- 从 PHP 中的输入表单获取日期 2022-01-01
- Mod使用GET变量将子域重写为PHP 2021-01-01
- 带有通配符的 Laravel 验证器 2021-01-01
- 正确分离 PHP 中的逻辑/样式 2021-01-01