当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP5.5新特性之yield理解与用法实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-04 09:54:26 浏览: 评论:0 

这篇文章主要介绍了PHP5.5新特性之yield理解与用法,结合实例形式分析了php5.5 yield生成器功能、原理、使用方法及相关操作注意事项,需要的朋友可以参考下

本文实例讲述了PHP5.5新特性之yield理解与用法,分享给大家供大家参考,具体如下:

yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。

yield生成器允许你 在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组。

使用示例:

  1. /** 
  2.  * 计算平方数列 
  3.  * @param $start 
  4.  * @param $stop 
  5.  * @return Generator 
  6.  */ 
  7. function squares($start$stop) { 
  8.   if ($start < $stop) { 
  9.     for ($i = $start$i <= $stop$i++) { 
  10.       yield $i => $i * $i
  11.     } 
  12.   } 
  13.   else { 
  14.     for ($i = $start$i >= $stop$i--) { 
  15.       yield $i => $i * $i//迭代生成数组: 键=》值 
  16.     } 
  17.   } 
  18. foreach (squares(3, 15) as $n => $square) { 
  19.   echo $n . 'squared is' . $square . '<br>'

输出:

  1. 3 squared is 9 
  2. 4 squared is 16 
  3. 5 squared is 25 
  4. ... 

示例2:

  1. //对某一数组进行加权处理 
  2. $numbers = array('nike' => 200, 'jordan' => 500, 'adiads' => 800); 
  3. //通常方法,如果是百万级别的访问量,这种方法会占用极大内存 
  4. function rand_weight($numbers
  5.   $total = 0; 
  6.   foreach ($numbers as $number => $weight) { 
  7.     $total += $weight
  8.     $distribution[$number] = $total
  9.   } 
  10.   $rand = mt_rand(0, $total-1); 
  11.   foreach ($distribution as $num => $weight) { 
  12.     if ($rand < $weightreturn $num
  13.   } 
  14. //改用yield生成器 
  15. function mt_rand_weight($numbers) { 
  16.   $total = 0; 
  17.   foreach ($numbers as $number => $weight) { 
  18.     $total += $weight
  19.     yield $number => $total
  20.   } 
  21. function mt_rand_generator($numbers
  22.   $total = array_sum($numbers); 
  23.   $rand = mt_rand(0, $total -1); 
  24.   foreach (mt_rand_weight($numbersas $num => $weight) { 
  25.     if ($rand < $weightreturn $num
  26.   } 
  27. }

Tags: PHP5 5 yield

分享到: