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 09 PHP
实用函数7
Nov 08 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php实现通过ftp上传文件
Jun 19 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
php metaphone()函数的定义和用法
May 15 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 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 魔术函数使用说明
2010/02/21 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP创建XML接口示例
2019/07/04 PHP
js资料prototype 属性
2007/03/13 Javascript
js右键菜单效果代码
2007/07/21 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
Python 中的lambda函数介绍
2018/10/10 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
学生自我鉴定
2013/12/18 职场文书
期中考试反思800字
2014/05/01 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python