2018-07-06 15:05:03 1279瀏覽
本篇文章扣丁學(xué)堂PHP培訓(xùn)小編和大家分享一下PHP數(shù)據(jù)導(dǎo)出知識(shí)點(diǎn),對(duì)PHP感興趣的小伙伴就隨著小編一起來(lá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)出達(dá)到上的數(shù)據(jù)萬(wàn)條時(shí)就直接帶來(lái)內(nèi)存不足的問(wèn)題。然后我找到了幾個(gè)解決方案。
前端解決方案:
PHP配合SheetJS/js-xlsx導(dǎo)出Excel大量數(shù)據(jù)
這個(gè)方案好處的不需要額外的接口,但是要依賴于前端開(kāi)發(fā)者。
導(dǎo)出成 csv:
該方案速度較快,完全后端實(shí)現(xiàn),缺點(diǎn)是 csv 格式對(duì)導(dǎo)出的形式要求比較高,要求是純數(shù)據(jù),不能存在圖片之類的富文本形式。
下面主要介紹一下導(dǎo)出 csv 的方式:
<?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'); // 寫入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ù)。
以上就是扣丁學(xué)堂PHP在線學(xué)習(xí)給大家分享的PHP數(shù)據(jù)導(dǎo)出知識(shí)點(diǎn),希望對(duì)小伙伴所有幫助。想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢。扣丁學(xué)堂是專業(yè)的PHP培訓(xùn)班,不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的PHP視頻教程供學(xué)員觀看學(xué)習(xí)哦??鄱W(xué)堂PHP技術(shù)交流群:374332265。
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“php培訓(xùn)資訊”的相關(guān)文章>>