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 相关文章推荐
PHP自动生成月历代码
Oct 09 PHP
用PHP编写PDF文档生成器
Oct 09 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
php中explode与split的区别介绍
Oct 03 PHP
php的ajax简单实例
Feb 27 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
php curl操作API接口类完整示例
May 21 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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
php中删除、清空session的方式总结
2015/10/09 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
两个Javascript小tip资料
2010/11/23 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
医大实习自我鉴定
2013/12/07 职场文书
年终总结会议主持词
2014/03/17 职场文书
教书育人演讲稿
2014/09/11 职场文书
食品卫生管理制度
2015/08/06 职场文书
element多个表单校验的实现
2021/05/27 Javascript
mysql自增长id用完了该怎么办
2022/02/12 MySQL
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL