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 相关文章推荐
改变Apache端口等配置修改方法
Jun 05 PHP
php 301转向实现代码
Sep 18 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
微信支付开发订单查询实例
Jul 12 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
CodeIgniter整合Smarty的方法详解
Aug 25 PHP
PHP反射学习入门示例
Jun 14 PHP
php layui实现前端多图上传实例
Jul 30 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php类
2006/11/27 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
JavaScript 自定义事件之我见
2017/09/25 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python读取xlsx的方法
2018/12/25 Python
Python变量访问权限控制详解
2019/06/29 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript
Python matplotlib多个子图绘制整合
2022/04/13 Python