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 相关文章推荐
mysql数据库差异比较的PHP代码
Feb 05 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
php 浮点数比较方法详解
May 05 PHP
PDO::errorInfo讲解
Jan 28 PHP
PHP正则表达式笔记与实例详解
May 09 PHP
Smarty模板语法详解
Jul 20 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 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
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
19个Android常用工具类汇总
2014/12/30 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
js实现微博发布小功能
2017/01/12 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python实现基本线性数据结构
2016/08/22 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
MYSQL支持事务吗
2013/08/09 面试题
门前三包责任书
2014/04/15 职场文书
单位在职证明书
2014/09/11 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
工程技术员岗位职责
2015/04/11 职场文书
电信营业员岗位职责
2015/04/14 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL