1. <?php
    2. #传统遍历取值模式
    3. $arr = [];
    4. for($i=0;$i<10000;++$i){
    5. $arr[]=$i;
    6. }
    7. foreach($arr as $v){
    8. echo $v,' ';
    9. }
    10. #消耗资源 byte (字节)
    11. echo memory_get_usage() . '</br>';
    12. #生成器取值模式
    13. function Getattr(){
    14. for($i=0;$i<10000;++$i){
    15. yield $i;
    16. //循环到生成器节点后停止循环,直到下一次使用$i时在循环一次
    17. }
    18. }
    19. #返回generator对象
    20. $num = Getattr();
    21. foreach($num as $v){
    22. echo $v,' '; 每输出一次Getattr里面循环一次
    23. }
    24. #消耗资源 byte(字节 )
    25. echo memory_get_usage() . '</br>';

    生成器可以很大程度少减少php内存使用,优化速度,在做数据大量输出,大数据分析时很有用

    4efa19a0b23808367378f01d9f554179.png