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迭代返回重复的最后一条记录?
基础教程推荐
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01