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缩略图生成程式(需要GD库支持)
Mar 06 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
php 过滤器实现代码
Aug 09 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
php实现简单的权限管理的示例代码
Aug 25 PHP
php格式文件打开的四种方法
Feb 24 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 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
html中select语句读取mysql表中内容
2006/10/09 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
ini_set的用法介绍
2014/01/07 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
keras K.function获取某层的输出操作
2020/06/29 Python
python线程优先级队列知识点总结
2021/02/28 Python
班级道德讲堂实施方案
2014/02/24 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
css3 选择器
2022/05/11 HTML / CSS