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 相关文章推荐
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
收集的PHP中与数组相关的函数
Mar 22 PHP
php url地址栏传中文乱码解决方法集合
Jun 25 PHP
基于PHP+Ajax实现表单验证的详解
Jun 25 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
php自动给网址加上链接的方法
Jun 02 PHP
Laravel5权限管理方法详解
Jul 26 PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python与R语言的简要对比
2017/11/14 Python
Python语言描述最大连续子序列和
2017/12/05 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
python输入中文的实例方法
2020/09/14 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
高三体育教学反思
2014/01/29 职场文书
求职简历的自我评价
2014/01/31 职场文书
教师党性分析材料
2014/02/04 职场文书
法制宣传实施方案
2014/03/13 职场文书
银行求职信怎么写
2014/05/26 职场文书
历史学专业求职信
2014/06/19 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python