工作需要导出几万的数据量。操作比较频繁。之前数据在七八千是数据导出很慢。phpExcel是方便但是性能一般。现在改为使用csv导出数据;可以缓解内存压力,一次导出两三万是没问题的。当然服务器内存给力,加上数据库优化相信这个还是比较方便的。
具体方法如下:
在Think文件下新建Csv.class,php
{ //导出csv文件 public function put_csv($list,$title){ $file_name="CSV".date("mdHis",time()).".csv"; header ( 'Content-Type: application/vnd.ms-excel' ); header ( 'Content-Disposition: attachment;filename='.$file_name ); header ( 'Cache-Control: max-age=0' ); $file = fopen('php://output',"a"); $limit=1000; $calc=0; foreach ($title as $v){ $tit[]=iconv('UTF-8', 'GB2312//IGNORE',$v); } fputcsv($file,$tit); foreach ($list as $v){ $calc++; if($limit==$calc){ ob_flush(); flush(); $calc=0; } foreach ($v as $t){ $tarr[]=iconv('UTF-8', 'GB2312//IGNORE',$t); } fputcsv($file,$tarr); unset($tarr); } unset($list); fclose($file); exit(); } } ?>
然后在控制器引入,使用命名空间即可:
use Think\Csv;
最后是:
数据库查出的字段顺序很重要,字段循序对应excel列的顺序。
$csv = new Csv(); $csv_title = array("字段一","字段二",...); $csv->put_csv($list,$csv_title);
$list是select处的二维数组。
原文地址:https://www.cnblogs.com/houdj/p/12012075.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。