当前位置:首页 > 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. } 
  19. foreach (squares(3, 15) as $n => $square) { 
  20.   echo $n . 'squared is' . $square . '<br>'; 
  21. } 

输出:

  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. { 
  6.   $total = 0; 
  7.   foreach ($numbers as $number => $weight) { 
  8.     $total += $weight; 
  9.     $distribution[$number] = $total; 
  10.   } 
  11.   $rand = mt_rand(0, $total-1); 
  12.   foreach ($distribution as $num => $weight) { 
  13.     if ($rand < $weight) return $num; 
  14.   } 
  15. } 
  16. //改用yield生成器 
  17. function mt_rand_weight($numbers) { 
  18.   $total = 0; 
  19.   foreach ($numbers as $number => $weight) { 
  20.     $total += $weight; 
  21.     yield $number => $total; 
  22.   } 
  23. } 
  24. function mt_rand_generator($numbers) 
  25. { 
  26.   $total = array_sum($numbers); 
  27.   $rand = mt_rand(0, $total -1); 
  28.   foreach (mt_rand_weight($numbers) as $num => $weight) { 
  29.     if ($rand < $weight) return $num; 
  30.   } 
  31. }

Tags: PHP5 5 yield

分享到: