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 相关文章推荐
DedeCms模板安装/制作概述
Mar 11 PHP
smarty的保留变量问题
Oct 23 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php中的观察者模式简单实例
Jan 20 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
php微信支付接口开发程序
Aug 02 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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+Html+缓存
2006/11/25 PHP
PHP伪造referer实例代码
2008/09/20 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
保洁主管岗位职责
2013/11/20 职场文书
学校运动会霸气口号
2014/06/07 职场文书
促销活动总结怎么写
2014/06/25 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
政风行风整改方案
2014/10/25 职场文书
护士工作心得体会
2016/01/25 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
实操Python爬取觅知网素材图片示例
2021/11/27 Python
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python
使用MybatisPlus打印sql语句
2022/04/22 SQL Server