开发中经常遇到大量导出数据的场景,如果只是几千条数据还好,随意框架写个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文件的工具网站:www.convertcsv.com/json-to-csv…
(网络搬运工,幸福你我他)
