猿问

通过PHP导出到CSV

通过PHP导出到CSV

假设我有数据库.。有什么方法可以通过PHP将数据库中的内容导出到CSV文件(以及文本文件[如果可能的话])?



白衣非少年
浏览 474回答 3
3回答

凤凰求蛊

我个人使用这个函数从任何数组创建CSV内容。function array2csv(array &$array){    if (count($array) == 0) {      return null;    }    ob_start();    $df = fopen("php://output", 'w');    fputcsv($df, array_keys(reset($array)));    foreach ($array as $row) {       fputcsv($df, $row);    }    fclose($df);    return ob_get_clean();}然后,您可以让用户下载该文件,如下所示:function download_send_headers($filename) {     // disable caching     $now = gmdate("D, d M Y H:i:s");     header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");     header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");     header("Last-Modified: {$now} GMT");     // force download       header("Content-Type: application/force-download");     header("Content-Type: application/octet-stream");     header("Content-Type: application/download");     // disposition / encoding on response body     header("Content-Disposition: attachment;filename={$filename}");     header("Content-Transfer-Encoding: binary");}用法示例:download_send_headers("data_export_" . date("Y-m-d") . ".csv");echo array2csv($array);die();

当年话下

可以使用此命令导出日期。<?php $list&nbsp;=&nbsp;array&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;array('aaa',&nbsp;'bbb',&nbsp;'ccc',&nbsp;'dddd'), &nbsp;&nbsp;&nbsp;&nbsp;array('123',&nbsp;'456',&nbsp;'789'), &nbsp;&nbsp;&nbsp;&nbsp;array('"aaa"',&nbsp;'"bbb"'));$fp&nbsp;=&nbsp;fopen('file.csv',&nbsp;'w');foreach&nbsp;($list&nbsp;as&nbsp;$fields)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;fputcsv($fp,&nbsp;$fields);}fclose($fp);?>首先,必须将数据从MySQL服务器加载到数组中。

缥缈止盈

为了记录在案,连接比连接速度快(我是认真的)。fputcsv甚至implode文件大小更小://&nbsp;The&nbsp;data&nbsp;from&nbsp;Eternal&nbsp;Oblivion&nbsp;is&nbsp;an&nbsp;object,&nbsp;always$values&nbsp;=&nbsp;(array)&nbsp;fetchDataFromEternalOblivion($userId,&nbsp;$limit&nbsp;=&nbsp;1000); //&nbsp;-----&nbsp;fputcsv&nbsp;(slow)//&nbsp;The&nbsp;code&nbsp;of&nbsp;@Alain&nbsp;Tiemblo&nbsp;is&nbsp;the&nbsp;best&nbsp;implementationob_start();$csv&nbsp;=&nbsp;fopen("php://output",&nbsp;'w'); fputcsv($csv,&nbsp;array_keys(reset($values)));foreach&nbsp;($values&nbsp;as&nbsp;$row)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;fputcsv($csv,&nbsp;$row);}fclose($csv);return&nbsp;ob_get_clean();//&nbsp;-----&nbsp;implode&nbsp;(slow,&nbsp;but&nbsp;file&nbsp;size&nbsp;is&nbsp;smaller) &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;=&nbsp;implode(",",&nbsp;array_keys(reset($values)))&nbsp;.&nbsp;PHP_EOL;foreach&nbsp;($values&nbsp;as&nbsp;$row)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;.=&nbsp;'"'&nbsp;.&nbsp;implode('","',&nbsp;$row)&nbsp;.&nbsp;'"'&nbsp;.&nbsp;PHP_EOL;}return&nbsp;$csv;//&nbsp;-----&nbsp;concatenation&nbsp;(fast,&nbsp;file&nbsp;size&nbsp;is&nbsp;smaller) &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;can&nbsp;use&nbsp;one&nbsp;implode&nbsp;for&nbsp;the&nbsp;headers&nbsp;=D$csv&nbsp;=&nbsp;implode(",",&nbsp;array_keys(reset($values)))&nbsp;.&nbsp;PHP_EOL;$i&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;is&nbsp;less&nbsp;flexible,&nbsp;but&nbsp;we&nbsp;have&nbsp;more&nbsp;control&nbsp;over&nbsp;the&nbsp;formattingforeach&nbsp;($values&nbsp;as&nbsp;$row)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;.=&nbsp;'"'&nbsp;.&nbsp;$row['id']&nbsp;.&nbsp;'",'; &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;.=&nbsp;'"'&nbsp;.&nbsp;$row['name']&nbsp;.&nbsp;'",'; &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;.=&nbsp;'"'&nbsp;.&nbsp;date('d-m-Y',&nbsp;strtotime($row['date']))&nbsp;.&nbsp;'",'; &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;.=&nbsp;'"'&nbsp;.&nbsp;($row['pet_name']&nbsp;?:&nbsp;'-'&nbsp;)&nbsp;.&nbsp;'",'; &nbsp;&nbsp;&nbsp;&nbsp;$csv&nbsp;.=&nbsp;PHP_EOL;}return&nbsp;$csv;这是从10行到数千行的几个报告优化的结论。这三个示例在1000行下工作良好,但当数据更大时就失败了。
随时随地看视频慕课网APP
我要回答