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 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
浅谈PHP中的
Apr 23 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 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
模拟flock实现文件锁定
2007/02/14 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
黄石寨导游词
2015/02/05 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
三好学生竞选稿
2015/11/21 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
Java输出Hello World完美过程解析
2021/06/13 Java/Android