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 相关文章推荐
isset和empty的区别
Jan 15 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
Php Mssql操作简单封装支持存储过程
Dec 11 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
php实现过滤UBB代码的类
Mar 12 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP中include和require的区别实例分析
May 07 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
php+js实现点赞功能的示例详解
Aug 07 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 str_replace的替换漏洞
2008/03/15 PHP
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php上传文件问题汇总
2015/01/30 PHP
微信红包随机生成算法php版
2016/07/21 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
js操作checkbox遇到的问题解决
2013/06/29 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
JavaScript时间转换处理函数
2015/04/14 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
后勤部长岗位职责
2013/12/14 职场文书
生物科学专业自荐书
2014/06/20 职场文书
上党课的心得体会
2014/09/02 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
谢师宴家长答谢词
2015/09/30 职场文书