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 intval的测试代码发现问题
Jul 27 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
PHP下载文件的函数实例代码
May 18 PHP
php接口技术实例详解
Dec 07 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
Yii2框架redis基本应用示例
Jul 13 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 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 开发环境配置(Zend Studio)
2010/04/28 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
window.onload使用指南
2015/09/13 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
js自定义弹框插件的封装
2020/08/24 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python实现动态数组的示例代码
2019/07/15 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
《伯牙绝弦》教学反思
2014/03/02 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
物理学专业自荐信
2014/06/11 职场文书
业务员管理制度范本
2015/08/06 职场文书