淺析PHP數(shù)據(jù)導(dǎo)出知識(shí)點(diǎn)
最近在做后臺(tái)管理的項(xiàng)目,后臺(tái)通常有數(shù)據(jù)導(dǎo)出到 excel 的需要,經(jīng)過(guò)之前搜索通常推薦使用的是 php excel ,我經(jīng)常使用的是 laravel ,對(duì)于 php excel 也有很好用的對(duì)應(yīng) package。
開(kāi)始使用是非常好用的,但是當(dāng)需要導(dǎo)出的數(shù)據(jù)達(dá)到上萬(wàn)條時(shí)就直接帶來(lái)內(nèi)存不足的問(wèn)題。
然后我找到了幾個(gè)解決方案。
前端解決方案
PHP配合SheetJS/js-xlsx導(dǎo)出Excel大量數(shù)據(jù)
這個(gè)方案好處的不需要額外的接口,但是要依賴(lài)于前端開(kāi)發(fā)者。
導(dǎo)出成 csv
該方案速度較快,完全后端實(shí)現(xiàn),缺點(diǎn)是 csv 格式對(duì)導(dǎo)出的形式要求比較高,要求是純數(shù)據(jù),不能存在圖片之類(lèi)的富文本形式。
下面主要介紹一下導(dǎo)出 csv 的方式
php 官方文檔 的介紹
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
導(dǎo)出完整例子
<?php
$name = 'test';
header ( "Content-type:application/vnd.ms-excel" );
header ( "Content-Disposition:filename=".$name.".csv" );
header ('Cache-Control: max-age=0');
//打開(kāi)PHP文件句柄,php://output 表示直接輸出到瀏覽器
$fp = fopen('php://output', 'a');
// 寫(xiě)入BOM頭,防止亂碼
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
// 生成的測(cè)試數(shù)據(jù)
function test()
{
for ($i=0; $i < 150000; $i++) {
yield ['name', $i, '男'];
}
}
// 表頭
$headers = ['名字', '年齡', '性別'];
fputcsv($fp, $headers);
foreach (test() as $value) {
fputcsv($fp, $value);
}
fclose($fp);
?>
在 laravel 中配合 chunk 使用可以方便快速導(dǎo)出全部數(shù)據(jù)。
以上就是本次知識(shí)點(diǎn)的全部?jī)?nèi)容,感謝大家對(duì)腳本之家的支持。
相關(guān)文章
php數(shù)組合并array_merge()函數(shù)使用注意事項(xiàng)
array_merge()函數(shù)在php中是對(duì)數(shù)組進(jìn)行合并的,可以把多個(gè)數(shù)組合成一個(gè)數(shù)組,并且不改變?cè)瓟?shù)組(www.111cn.net)的值了,但今天我在使用array_merge合并數(shù)組時(shí)碰到幾個(gè)小細(xì)節(jié)上的問(wèn)題,下面我舉例子給各位朋友看看2014-06-06
php?substr()去掉最后一位字符的實(shí)例方法
在本篇文章里小編給大家整理了一篇關(guān)于php?substr()去掉最后一位字符的實(shí)例方法,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-12-12
php中時(shí)間函數(shù)date及常用的時(shí)間計(jì)算
本篇文章主要介紹了php中時(shí)間函數(shù)date及常用的時(shí)間計(jì)算的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05
利用PHPExcel實(shí)現(xiàn)Excel文件的寫(xiě)入和讀取
本篇文章主要介紹了利用PHPExcel實(shí)現(xiàn)Excel文件的寫(xiě)入和讀取的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
修改了一個(gè)很不錯(cuò)的php驗(yàn)證碼(支持中文)
很早前在PHP喜悅國(guó)際村看到的一個(gè)驗(yàn)證碼類(lèi),寫(xiě)的很強(qiáng)。但有些邏輯方面感覺(jué)處理的不好,然后我不喜歡完全用session來(lái)處理驗(yàn)證碼。這在大型系統(tǒng)中是很不好的2007-02-02
PHP實(shí)現(xiàn)十進(jìn)制數(shù)字與二十六進(jìn)制字母串相互轉(zhuǎn)換操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)十進(jìn)制數(shù)字與二十六進(jìn)制字母串相互轉(zhuǎn)換操作,涉及php字符串遍歷、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-08-08

