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 相关文章推荐
如何使用PHP获取网络上文件
Oct 09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php类的定义与继承用法实例
Jul 07 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
简单谈谈 php 文件锁
Feb 19 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
php在linux环境中如何使用redis详解
Dec 15 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相当简单的分页类
2008/10/02 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
socket + select 完成伪并发操作的实例
2017/08/15 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
Python urllib2运行过程原理解析
2020/06/04 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
年度考核自我评价
2014/01/25 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
万能检讨书2000字
2014/10/17 职场文书
滞留工资返还协议书
2014/10/19 职场文书
离婚被告代理词
2015/05/23 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js