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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
10个实用的PHP代码片段
Sep 02 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
php把数组值转换成键的方法
Jul 13 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 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
239军机修复记
2021/03/02 无线电
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
python 字符串split的用法分享
2013/03/23 Python
python创建文件备份的脚本
2018/09/11 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
简单了解django orm中介模型
2019/07/30 Python
python 表格打印代码实例解析
2019/10/12 Python
win10安装python3.6的常见问题
2020/07/01 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
岗位职责的定义
2013/11/10 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
学校安全责任书范本
2014/07/23 职场文书
大型公益活动策划方案
2014/08/20 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
2015年手术室工作总结
2015/05/11 职场文书