博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中使用foreach引用需要注意的问题
阅读量:6245 次
发布时间:2019-06-22

本文共 705 字,大约阅读时间需要 2 分钟。

本文目的

今天在写项目时,发现php foreach语句中使用引用会出现奇特现象,故此记录此现象,原因和解决方法。希望对其他人有帮助!

现象

猜猜下面的代码会输出什么?

'one', 2=>'two');foreach ($a as $key => &$val) {} // do nothingvar_dump($a); foreach ($a as $key => $val) {} // do nothingvar_dump($a);

如果没有遇到过类似的问题,肯定会对结果大惊!如下图

image001.jpg

我勒个去,怎么修改了数组,代码中没有任何显示修改数组的操作呀!

 

原因

在foreach中使用了引用,&$val,这个值并没有在第一个foreach退出后自动清空,而是保留在内容中,当进入第二个foreach时,仍然可以访问到$val。所以,在第二个foreach的第一次循环时,实际上已经修改了$a[1]的值。第二次循环时,值保持不变。

解决方案

第一次循环退出后,unset这个临时变量$val,如下代码所示:

'one', 2=>'two'); foreach ($a as $key => &$val) {} // do nothingunset($val); // important!var_dump($a);foreach ($a as $key => $val) {} // do nothingvar_dump($a);

输出结果如下:

image002.jpg

 

参考资料

转载于:https://www.cnblogs.com/bourneli/archive/2012/10/29/2745130.html

你可能感兴趣的文章
web.xml文件的 xsd引用(或dtd引用)学习
查看>>
c#用run32dll打开系统dll(如系统图片查看器,并置最顶层)
查看>>
C#4.0中var和dynamic的区别
查看>>
C# 版本的 计时器类:精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出...
查看>>
Redis Service
查看>>
Android中SharedPreferences使用方法介绍
查看>>
ubuntu系统备份与恢复(也适用于其他linux系统)
查看>>
kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
查看>>
mac中配置jdk环境
查看>>
EasyUI应用总结
查看>>
iOS开发UI篇—Quartz2D简单介绍
查看>>
JavaScript_js模拟键盘输入
查看>>
持续集成简介(转)
查看>>
MPreview.js
查看>>
which,whereis, locate, find
查看>>
Android Studio 2.2 Record Espresso Test
查看>>
HDU4003Find Metal Mineral[树形DP 分组背包]
查看>>
Android selector背景以及透明色
查看>>
MySQL集群系列1:2台机器搭建双主集群
查看>>
leetcode342合理运用位操作判断4的幂
查看>>