A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuqiong 金牌黑马   /  2018-4-8 14:35  /  1070 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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




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

2 个回复

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