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 base64+gzinflate压缩编码和解码代码
Oct 03 PHP
10个实用的PHP代码片段
Sep 02 PHP
php数字游戏 计算24算法
Jun 10 PHP
php中session使用示例
Mar 29 PHP
正确的PHP匹配UTF-8中文的正则表达式
May 13 PHP
php需登录的文件上传管理系统
Mar 21 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP 类与构造函数解析
Feb 06 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 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多线程类及用法实例
2014/12/03 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
常用js脚本
2006/12/03 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python入门学习指南分享
2018/04/11 Python
python开发游戏的前期准备
2019/05/05 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python 回溯法模板详解
2020/02/26 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
大学生应聘求职信
2014/05/26 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
计生工作先进事迹
2014/08/15 职场文书
2014年超市工作总结
2014/11/19 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript
java代码实现空间切割
2022/01/18 Java/Android
Django基础CBV装饰器和中间件
2022/03/22 Python
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js