在循环一个大数组的时候yield非常好用能节省内存.

比如有个大文件需要读取并处理,如果全部读出来太耗费内存,就可以这样做

<?php
function getRows($file) {
$handle = fopen($file, 'rb');
var_dump("------");
if ($handle === false) {
throw new Exception();
}
while (feof($handle) === false) {
yield fgetcsv($handle);
}
} foreach (getRows('data.csv') as $row) {
var_dump($row);
}

data.csv内容如下

1,2,3
101,202,303
111,222,333

运行结果如下:

string(6) "------"
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
array(3) {
[0]=>
string(3) "101"
[1]=>
string(3) "202"
[2]=>
string(3) "303"
}
array(3) {
[0]=>
string(3) "111"
[1]=>
string(3) "222"
[2]=>
string(3) "333"
}

这东西返回的结果是可遍历的,给循环用非常合适.

php yield使用的更多相关文章

  1. Python 生成器与迭代器 yield 案例分析

    前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...

  2. node 异步回调解决方法之yield

    先看如何使用 使用的npm包为genny,npm 安装genny,使用 node -harmony 文件(-harmony 为使用es6属性启动参数) 启动项目 var genny= require( ...

  3. yield生成器及字符串的格式化

    一.生成器 def ran(): print('Hello world') yield 'F1' print('Hey there!') yield 'F2' print('goodbye') yie ...

  4. Python中的生成器与yield

    对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...

  5. Python yield函数理解

    Python中的yield函数的作用就相当于一个挂起,是不被写入内存的,相当于一个挂起的状态,用的时候迭代,不用的时候就是一个挂起状态,挂起状态会以生成器的状态表现

  6. ecma6 yield

    function * generator(k){ console.log('begin'); var x = yield k; console.log('x:',x); var y = yield x ...

  7. Python yield与实现

    Python yield与实现  yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭 ...

  8. 可惜Java中没有yield return

    项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...

  9. 使用yield进行异步流程控制

    现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...

  10. GetEnumerator();yield

    GetEnumerator()方法的实质实现: 说明:只要一个集合点出GetEnumerator方法,就获得了迭代器属性,就可以用MoveNext和Current来实现foreach的效果,如上图. ...

随机推荐

  1. 【工具分享】红队重点资产指纹识别 -- P1finger -0.02(最新版本)

    工具介绍: P1finger 红队行动下的重点资产指纹识别工具.P1finger 是一个重点资产指纹识别的工具,旨在通过HTTP请求特征来识别目标系统.其主要特点包括: 语言和实现: 语言:使用Go语 ...

  2. JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇

    JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇 在上一篇<JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇>中咱们知道类一个Java类的生命周期需要经历以下七个阶 ...

  3. Json Number Format 异常 Expected an int but was 2168520652 at line 1 column 325

    某变量声明为Integer类型,报json 转换异常 超出了Integer的最大值2147483647, 将类型修改为BigInteger即可,BigInteger:支持任意精度的整数 写Bean时, ...

  4. Python 在PDF中添加条形码、二维码

    在PDF中添加条码是一个常见需求,特别是在需要自动化处理.跟踪或检索PDF文件时.作为一种机器可读的标识符,PDF中的条码可以包含各种类型的信息,如文档的唯一标识.版本号.日期等.以下是一篇关于如何使 ...

  5. AWS Data Analytics Fundamentals 官方课程笔记 - Intro, Volumn, Velocity

    Intro process 就是 The process component is where services manipulate data into needed forms. 比如补齐 nul ...

  6. 必应每日壁纸API封装

    简介 这个类封装了必应首页的每日壁纸查看功能,提供了查看.保存壁纸的方法,最大支持查看近8天的壁纸 使用方法 async Task Main() { try { var bing = BingWall ...

  7. manim边学边做--角度标记

    manim中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记. 对于锐角和钝角,角度标记是一个弧,弧的度数与角的度数一样: 对于直角,角度标记是一个垂直的拐角. manim中 ...

  8. 《linux实用指令积累》持续更新。。。

    一.远程服务器文件拷贝 1.1.scp scp /home/a.txt root@127.0.0.1:/home/ 1.2.sshpass(适用于脚本调用,直接指定密码) 1.2.1.安装sshpas ...

  9. Vue3 插槽技巧

    最近想着使用Vue3+ElementPlus封装一个后台管理常用的Table组件,设计之初考虑到高自定义性,所以便延伸出以下的代码 使用技术栈: Vue3.x ElementPlus Jsx Jsx ...

  10. opencv equalizeHist

    ''' What are histograms? Histograms are collected counts of data organized into a set of predefined ...