PHP7新特性foreach 修改示例介绍


Posted in PHP onAugust 26, 2016

一、foreach()循环对数组内部指针不再起作用,在PHP7之前,当数组通过foreach迭代时,数组指针会移动。现在开始,不再如此,见下面代码。。

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

PHP5运行的结果会打印int(1) int(2) bool(false)

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接口,即可称之为迭代对象。

以上所述是小编给大家介绍的PHP7新特性foreach 修改,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php at(@)符号的用法简介
Jul 11 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
简单的自定义php模板引擎
Aug 26 #PHP
PHP flush 函数使用注意事项
Aug 26 #PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 #PHP
简单的pgsql pdo php操作类实现代码
Aug 25 #PHP
php mongodb操作类 带几个简单的例子
Aug 25 #PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 #PHP
php 的反射详解及示例代码
Aug 25 #PHP
You might like
php 购物车完整实现代码
2014/06/05 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
Python实现的双色球生成功能示例
2017/12/18 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
AJAX的全称是什么
2012/11/06 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
人事主管岗位职责范本
2013/12/04 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
《秋思》教学反思
2016/02/23 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
MySQL 分组查询的优化方法
2021/05/12 MySQL
用JS写一个发布订阅模式
2021/11/07 Javascript
一行Python命令实现批量加水印
2022/04/07 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python