PHP中foreach循环中使用引用要注意的地方


Posted in PHP onJanuary 02, 2011
foreach ($array as &$row) { 
$row = explode('/', $row); 
} 
foreach ($array as $row) { 
//do something 
}

这么写,在第二个循环会出逻辑错误,加入第二个循环中do something的地方是输出$row,循环到最后一个的时候的输出是倒数第二个元素,而不是最后一个

要这么写

foreach ($array as &$row) { 
$row = explode('/', $row); 
} 
unset($row); 
foreach ($array as $row) { 
//do something 
}

或者第一个循环这么写
foreach ($array as $key => $row) { 
$array[$key] = explode('/', $row); 
}

说一下原理
第一个循环使用了引用,循环结束后,$row引用的是$array数组的最后一个元素,当开始第二个循环的时候,$row变量每次循环都会被赋一个新值,在php中,如果一个内存空间是被引用的,那么当改变它的时候是直接改变这块内存空间的值,也就是说,当第二个foreach的第一次循环,$array的最后一个元素的值就被改变为$array的第一个元素的值,第二次循环的时候,改变为第二个元素的值,倒数第二次循环的时候,被改变为倒数第二个元素值,而最后一次循环的时候得道的值必然是那个倒数第二个值
当然,如果php的for循环有作用域的话,也不会出现此问题.....

PHP 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
php编写一个简单的路由类
Apr 13 PHP
php中json_encode中文编码问题分析
Sep 13 PHP
深入apache host的配置详解
Jun 09 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
php解析xml方法实例详解
May 12 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
详解Yii2 rules 的验证规则
Dec 02 PHP
thinkphp实现附件上传功能
May 26 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 PHP
PHP开发中四种查询返回结果分析
Jan 02 #PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 #PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 #PHP
完美实现GIF动画缩略图的php代码
Jan 02 #PHP
php实现无限级分类实现代码(递归方法)
Jan 01 #PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 #PHP
PHP读取XML值的代码(推荐)
Jan 01 #PHP
You might like
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
JS实现点星星消除小游戏
2020/03/24 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
Python NumPy库安装使用笔记
2015/05/18 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
英文商务邀请信
2014/01/22 职场文书
白酒市场营销方案
2014/02/25 职场文书
求职信模板
2014/05/23 职场文书
篮球拉拉队口号
2015/12/25 职场文书
教师个人教学反思
2016/02/23 职场文书
手残删除python之后的补救方法
2021/06/26 Python
MySQL分区表实现按月份归类
2021/11/01 MySQL