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连接数据库代码应用分析
May 29 PHP
基于php-fpm 参数的深入理解
Jun 03 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 PHP
PHP7创建销毁session的实例方法
Feb 03 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
vue better-scroll插件使用详解
2018/01/25 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
django 自定义用户user模型的三种方法
2014/11/18 Python
python实现连接mongodb的方法
2015/05/08 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
python实现日志按天分割
2019/07/22 Python
python tkinter组件摆放方式详解
2019/09/16 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
物业管理毕业生个人的求职信
2013/11/30 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
兴趣小组活动总结
2014/05/05 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
小学教师见习总结
2015/06/23 职场文书
小学语文国培研修日志
2015/11/13 职场文书
Python爬取某拍短视频
2021/06/11 Python