PHP7 foreach() 函数修改


Posted in PHP onMarch 09, 2021

一、foreach()循环对数组内部指针不再起作用。

$array = [0, 1, 2];
foreach ($array as &$val) 
{
    var_dump(current($array));
}

PHP7运行的结果会打印三次int(0),也就是说数组的内部指针并没有改变。

之前运行的结果会打印int(1), int(2)和bool(false)

 

 二、按照值进行循环的时候,foreach是对该数组的拷贝操作

foreach按照值进行循环的时候(by-value),foreach是对该数组的一个拷贝进行操作。这样在循环过程中对数组做的修改是不会影响循环行为的。

$array = [0, 1, 2];
$ref =& $array; // Necessary to trigger the old behavior
foreach ($array as $val) {
    var_dump($val);
    unset($array[1]);
}

上面的代码虽然在循环中把数组的第二个元素unset掉,但PHP7还是会把三个元素打印出来:(0 1 2)

之前老版本的PHP会把1跳过,只打印(0 2).

 

三、按照引用进行循环的时候,对数组的修改会影响循环。

如果在循环的时候是引用的方式,对数组的修改会影响循环行为。不过PHP7版本优化了很多场景下面位置的维护。比如在循环时往数组中追加元素。

$array = [0];
foreach ($array as &$val) {
    var_dump($val);
    $array[1] = 1;
}

上面的代码中追加的元素也会参与循环,这样PHP7会打印"int(0) int(1)",老版本只会打印"int(0)"。

 

四、对简单对象plain (non-Traversable) 的循环。

对简单对象的循环,不管是按照值循环还是按引用循环,和按照引用对数组循环的行为是一样的。不过对位置的管理会更加精确。

 

五、对迭代对象(Traversable objects)对象行为和之前一致。

stackoverflow上面的解释:Traversable object is one that implements Iterator or IteratorAggregate interface。如果一个对象实现了iterator或者IteratorAggregate接口,即可称之为迭代对象。

PHP 相关文章推荐
php中文件上传的安全问题
Oct 09 PHP
一个改进的UBB类
Oct 09 PHP
php HandlerSocket的使用
May 02 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
Nov 13 PHP
基于PHP的登录和注册的功能的实现
Aug 06 PHP
PHP7 list() 函数修改
Mar 09 #PHP
PHP7变量处理机制修改
Mar 09 #PHP
PHP7新特性
Mar 09 #PHP
Yii 实现数据加密和解密
Mar 09 #PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 #PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 #PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 #PHP
You might like
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php取出数组单个值的方法
2018/03/12 PHP
json 实例详细说明教程
2009/10/31 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
python中Django文件上传方法详解
2020/08/05 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
见习报告怎么写
2014/10/31 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python