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面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 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批量生成图片缩略图的方法
2015/06/18 PHP
php实现可逆加密的方法
2015/08/11 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
js调用css属性写法
2013/09/21 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
js简单的分页器插件代码实例
2019/09/11 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
python global关键字的用法详解
2019/09/05 Python
Python的信号库Blinker用法详解
2020/12/31 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
函授自我鉴定
2013/11/06 职场文书
综治工作汇报材料
2014/10/27 职场文书
农村党员干部承诺书
2015/05/04 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
pandas求平均数和中位数的方法实例
2021/08/04 Python
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers