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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
聊天室php&mysql(六)
Oct 09 PHP
PHP初学入门
Nov 19 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
解析php中反射的应用
Jun 18 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
php最简单的删除目录与文件实现方法
Nov 28 PHP
php关联数组快速排序的方法
Apr 17 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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截取中文字符串不乱码的方法
2013/12/25 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python实现换位加密算法的示例
2018/10/14 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python字符串判断密码强弱
2020/03/18 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
名企HR怎样看待求职信
2014/02/23 职场文书
三好学生个人总结
2015/02/15 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript