当前位置: 首页 > 面试题库 >

为什么php通过引用迭代会返回重复的最后一条记录?

江英华
2023-03-14
问题内容

我只花了2个小时来寻找一个显然来自&value的foreach迭代的错误。我有一个多维数组,当运行此数组时:

   foreach($arrayOfJsonMods as &$item){
        //TODO memcached votes
   }

并且PHP返回了一个具有相同元素计数的数组,但是返回了最后一条记录为DUPLICATE的数组。关于这种结构,我是否不了解?

我在另一台机器上运行了代码,结果是一样的。


问题答案:

我猜想您在这里 重复使用
&$item,并且正在绊倒一种行为,该行为被报告为bug千次,但是是引用的正确行为,因此这本手册建议:

即使在foreach循环之后,仍保留$ value的引用和最后一个数组元素。建议通过unset()销毁它。

foreach($arrayOfJsonMods as &$item)
{
   //TODO memcached votes
}
unset($item);


 类似资料:
  • 我可以看到返回。但是现在已经添加到C++20标准中,为什么返回?cppreference指定: 返回值 等于last的迭代器。 这个选择背后的理性是什么? 与相比,用例的优势是什么?

  • 根据下面的php代码,输出为 我理解&$ref是通过引用传递的。但在赋值之后类似($row=&$ref;)在任何地方,每当“row”更改值时,“ref”也会更改为与“row”相同的值。真的很迷惑。似乎=不仅将右值赋给左值。有人能核实一下吗?

  • 我从JS开始,实际上喜欢异步方面(来自Python),但我不确定为什么有些函数返回Promise。具体来说,下面使用的代码让我想知道返回了什么: 除了流之外,我们在之后得到的HTTP响应是一个文本块,客户端稍后会对其进行解释,以提取标题、正文和其他有趣的元素,作为HTTP内容分析的一部分。 关键是这个文本块是一块的,所以第一个已经有了整个响应——为什么JSON主体的解析是异步操作,不同于第二个?

  • 当我执行普通Select时,返回正确的结果,但当我执行Select for DB uptime时,它始终返回相同的第一个结果。我确实检查了Postgres日志,我看到select被执行了。

  • 我正在尝试使用废料并遇到一些问题。问题是我的脚本返回重复的结果。我正在尝试从父页面抓取URL,并按照每个单独的URL获取关联的日期。抓取每个嵌套的URL后,它似乎会再次从父页面输出URL列表。 下面是脚本: 下面是 json 输出: 重申一下,我很难从父页面输出一个url列表,从每个单独的嵌套URL输出一个相应的日期列表。我是scrapy和python的新手,所以希望有人能给我指出正确的方向。

  • 为什么编译器会抓狂?我应该能够修改返回的对象,如果java返回一个对象引用的权利?