php yield使用

在循环一个大数组的时候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"
}
复制代码

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

posted @   李照耀  阅读(541)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示