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 28 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
php判断数组是否为空的实例方法
May 10 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
thinkphp浏览历史功能实现方法
2014/10/29 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
python修改注册表终止360进程实例
2014/10/13 Python
python实现堆栈与队列的方法
2015/01/15 Python
Python httplib模块使用实例
2015/04/11 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
深入了解Python enumerate和zip
2020/07/16 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
酒店营销策划方案
2014/02/07 职场文书
2014组织生活会方案
2014/05/19 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
代办出身证明书
2014/10/21 职场文书
群众路线调研报告范文
2014/11/03 职场文书
英文感谢信格式
2015/01/21 职场文书
三八妇女节致辞
2015/07/31 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python