PHP5.5新特性之yield理解与用法实例分析


Posted in PHP onJanuary 11, 2019

本文实例讲述了PHP5.5新特性之yield理解与用法。分享给大家供大家参考,具体如下:

yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。

yield生成器允许你 在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组。

使用示例:

/**
 * 计算平方数列
 * @param $start
 * @param $stop
 * @return Generator
 */
function squares($start, $stop) {
  if ($start < $stop) {
    for ($i = $start; $i <= $stop; $i++) {
      yield $i => $i * $i;
    }
  }
  else {
    for ($i = $start; $i >= $stop; $i--) {
      yield $i => $i * $i; //迭代生成数组: 键=》值
    }
  }
}
foreach (squares(3, 15) as $n => $square) {
  echo $n . 'squared is' . $square . '<br>';
}

输出:

    3 squared is 9
    4 squared is 16
    5 squared is 25
    ...

示例2:

//对某一数组进行加权处理
$numbers = array('nike' => 200, 'jordan' => 500, 'adiads' => 800);
//通常方法,如果是百万级别的访问量,这种方法会占用极大内存
function rand_weight($numbers)
{
  $total = 0;
  foreach ($numbers as $number => $weight) {
    $total += $weight;
    $distribution[$number] = $total;
  }
  $rand = mt_rand(0, $total-1);
  foreach ($distribution as $num => $weight) {
    if ($rand < $weight) return $num;
  }
}
//改用yield生成器
function mt_rand_weight($numbers) {
  $total = 0;
  foreach ($numbers as $number => $weight) {
    $total += $weight;
    yield $number => $total;
  }
}
function mt_rand_generator($numbers)
{
  $total = array_sum($numbers);
  $rand = mt_rand(0, $total -1);
  foreach (mt_rand_weight($numbers) as $num => $weight) {
    if ($rand < $weight) return $num;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
Php图像处理类代码分享
Jan 19 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
PHP中的session安全吗?
Jan 22 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
Laravel相关的一些故障解决
Aug 19 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 #PHP
PHP类的自动加载机制实现方法分析
Jan 10 #PHP
PHP验证类的封装与使用方法详解
Jan 10 #PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 #PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 #PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 #PHP
PHP微信支付结果通知与回调策略分析
Jan 10 #PHP
You might like
php中通过curl smtp发送邮件
2012/06/05 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
FF IE兼容性的修改小结
2009/09/02 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
js获取域名的方法
2015/01/27 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
Python中内建函数的简单用法说明
2016/05/05 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python可视化实现代码
2019/01/15 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
学历公证委托书
2014/04/09 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
关于运动会的广播稿
2014/09/22 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python