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实现数组筛选奇数和偶数示例
Apr 11 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
详解php中的implements 使用
Jun 13 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
PDO::exec讲解
Jan 28 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 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
牡丹941资料
2021/03/01 无线电
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
javascript实现yield的方法
2013/11/06 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
python绘制分布折线图的示例
2020/09/24 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
银行实习生的自我评价
2013/12/09 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书