首页 > 编程语言 >php yield详解

php yield详解

时间:2022-10-30 18:02:48浏览次数:52  
标签:遍历 yield echo #### 详解 php ### row

 一.介绍

 

 

二.简单例子

//包含yield的函数可以生成一个generator 对象,可以被foreach 遍历
function Generator()
{
for ($i = 0; $i < 3; $i++) {
echo "输出存在感1\n";
yield $i;
echo "输出存在感2\n";
}
}

echo "###返回对象1####\n";
var_dump(Generator());

echo "###返回对象####\n";

echo "###遍历一次情况####\n";

foreach (Generator() as $value) {

var_dump($value);
break; //只遍历一次的情况
}

echo "###遍历一次情况####\n";

echo "###一直遍历的情况####\n";

foreach (Generator() as $value) {

var_dump($value); //遍历多次

}

echo "###一直遍历的情况####\n";

/*
###返回对象1####
object(Generator)#1 (0) {
}
###返回对象####
###遍历一次情况####
输出存在感1
int(0)
###遍历一次情况####
###一直遍历的情况####
输出存在感1
int(0)
输出存在感2
输出存在感1
int(1)
输出存在感2
输出存在感1
int(2)
输出存在感2
###一直遍历的情况####
* */
1:在调用函数返回的时候,可以发现for里面的语句并没有执行
2:在遍历一次的时候,可以发现调用函数,却没有正常的for循环3次,只循环了一次
3:在遍历一次的情况时,"存在感2"竟然没有调用,在一直遍历的情况下才调用


三. yield 读取excel大文件数据
<?php
require '../vendor/autoload.php';
class Read{
public static function readLot(){
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load('person.xlsx'); //载入excel表格
$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow();
$lines = $highestRow - 1;
if ($lines <= 0) {
echo 'Excel表格中没有数据';
die;
}
//获取excel内容
$data = self::yieldData($highestRow, $worksheet);
//遍历生成器[generate]
foreach ($data as $k => $v) {
//使用的时候就会读取一条出来,就不会把所有数据读取放在$data里面,造成内存不足,这就是yield的强大之处
var_dump($v).PHP_EOL;
echo $k;
echo '-----';
}

}
//包含yield关键字的函数会生成生成器generate
private static function yieldData($highestRow, $worksheet)
{
for ($row = 2; $row <= $highestRow; ++$row) {
$data[$row]['name'] = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
$data[$row]['remark'] = $worksheet->getCellByColumnAndRow(2, $row)->getValue();
yield $data[$row];
}
}

}
Read::readLot();



标签:遍历,yield,echo,####,详解,php,###,row
From: https://blog.51cto.com/u_14141002/5807586

相关文章

  • C语言之指针详解
    目录1指针1.1简介1.2什么是指针1.3使用指针1.3.1简单使用1.3.2NULL指针1.3.3指针算术运算1.3.3.1定义1.3.3.2遍历数组:递增一个指针1.3.3.3遍历数组:递减一个指针......
  • RSA算法详解
    基础知识RSA设计\(m^{ed}\equiv1\:(mod\:n)\)RSA密钥生成第一步,随机选择两个不相等的质数p和q。如61和53。(质数越大越安全。)第二步,计算p和q的乘积n。把61和5......
  • 【Vue】Vuex详解
     【前言】本博客系统的讲诉了Vuex的安装、搭建。以及Actions、Mutations、State、Getters的使用,为什么使用mapState、mapGetters以及一些细节的解释Vuex原理讲解 编辑Acti......
  • 类变量(类对象变量)和实例对象变量详解
    类变量总结:第一:作为类对象的变量每次创建一个新的实例对象时,类对象变量就多一个引用指向它通过实例对象来修改类对象变量的取值,实际上是让实例对象的data指向了另外......
  • pikachu php反序列化漏洞
    原理php中serialize(),unserialize()这两个函数。序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:classS{publ......
  • Matlab的regionprops详解
    招募大量matlab技术人员,有大量matlab需求订单,均为个人短期可以完成,有时间的朋友可以加我微信  :Ahxyz6666 matlab函数_连通区域1、matlab函数bwareaopen──删除小面......
  • 【博学谷学习记录】超强总结,用心分享|Python容器详解
    一、Python中容器的介绍容器:也可以称为是数据序列,或者高级数据类型,也是Python中的数据类型。容器中可以存放多个数据。Python中常用的容器有4种:list(列表)、......
  • np.clip()的用法和python,numpy中np.random.choice()的用法详解
    np.clip()的用法 numpy.clip(a,a_min,a_max,out=None)Clip(limit)thevaluesinanarray.Givenaninterval,valuesoutsidetheintervalareclippedtoth......
  • equals和hashCode详解
    equals和hashCode详解http://www.cnblogs.com/Qian123/p/5703507.html阅读目录equals()方法详解hashcode()方法详解Hashset、Hashmap、Hashtable与hashcode()和equa......
  • php 读取 csv 转数组列表
    我们有个文档需要修改,但是文档列太多,以及数量太大,以至于眼睛看起来很吃力,于是我决定做个简单的转化用脚本读取我想要验证的列的内容是否正确.于是就产生了一个这样将csv......