传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

PHP
学习经历: -
本帖最后由 wuqiong 于 2018-4-9 14:29 编辑

开发中经常遇到大量导出数据的场景,如果只是几千条数据还好,随意框架写个find()方法就出来了。如果几十万,上百万出来的数组数据就很容易将内存搞爆掉。

那如何取出大量数据,而又不存到数组中呢?这就要用到了PHP中的迭代器:Iterator。如果有看过PDO::query的返回值类型的话,我们会发现,这个方法返回的 PDOStatement,正是对 Iterator 的实现。关于 Iterator,请自行脑补。

$sql = 'select * from user';
$pdo = new \PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');
$pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$rows = $pdo->query($sql);
foreach ($rows as $row) {
   
$line = [$row['id'], $row['username'], $row['password'], $row['create_time']];
}
        在表中生成7位数量级的记录,执行上面的代码,通过查看内存使用,发现整个过程只占用了0.XM的内存。

        推荐一个json数据转excel文件的工具网站:http://www.convertcsv.com/json-to-csv.htm




(网络搬运工,幸福你我他)

分享至 : QQ空间
收藏

2 个回复

倒序浏览
666666
回复 使用道具 举报
加油吧少年
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马
关闭

站长推荐 上一条 /4 下一条