工作中常會有遇到導入/導出的需求,以下是常用的方法。
讀取CSV文件,可以分頁讀取,設定讀取行數,起始行數即可。
匯出CSV文件,用兩種方法實作。
/**<br>
* 讀取CSV檔案<br>
* @param string $csv_file csv檔案路徑<br>
* @param int $lines 讀取行數<br>
* @param int $offset 起始行數<br>
* @return array|bool<br>
*/<br>
公用函數 read_csv_lines($csv_file ='',$lines = 0,$offset = 0)<br>
{<br>
if (!$fp = fopen($csv_file, 'r')) {<br>
返回 false;<br>
}<br>
$i = $j = 0;<br>
while (false!==($line = fgets($fp))) {<br>
如果($i++
則續;<br>
}<br>
休息;<br>
}<br>
$data = array();<br>
while (($j++
$data[] = fgetcsv($fp);<br>
}<br>
fclose($fp);<br>
返回$資料;<br>
}<br>
<br>
<br>
/**<br>
* 匯出CSV檔案<br>
* @param array $data 資料<br>
* @param array $header_data 首行資料<br>
* @param string $file_name 檔案名稱<br>
* @return string<br>
*/<br>
公用函數export_csv_1($data=[],$header_data=[],$file_name='')<br>
{<br>
header('內容類型:應用程式/八位元組流');<br>
header('Content-Disposition: 附件; filename='.$file_name);<br>
如果(!空($ header_data)){<br>
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","',$header_data).'"'."n");<br>
}<br>
foreach($data as $key => $value){<br>
$輸出=陣列();<br>
$output[] = $value['id'];<br>
$output[] = $value['name'];<br>
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","', $output).""n");<br>
}<br>
}<br>
<br>
/**<br>
* 匯出CSV檔案<br>
* @param array $data 資料<br>
* @param array $header_data 首行資料<br>
* @param string $file_name 檔案名稱<br>
* @return string<br>
*/<br>
公用函數export_csv_2($data=[],$header_data=[],$file_name='')<br>
{<br>
header('Content-Type: application/vnd.ms-excel');<br>
header('內容處置:附件;filename='.$file_name);<br>
header('Cache-Control: max-age=0');<br>
$fp=fopen('php://output','a');<br>
如果(!空($ header_data)){<br>
foreach($header_data as $key => $value){<br>
$header_data[$key] = iconv('utf-8', 'gbk', $value);<br>
}<br>
fputcsv($fp, $header_data);<br>
}<br>
$num = 0;<br>
//每隔$limit行,刷新輸出buffer,不要太大,也不要太小<br> $limit = 100000;<br>
//逐行取出數據,不浪費記憶體<br>
$count = count($data);<br>
if ($count > 0) {<br>
for ($i = 0; $i
$num++;<br>
//刷新輸出buffer,以防止因資料過多造成問題<br>
if ($limit == $num) {<br>
ob_flush();<br>
flush();<br>
$num = 0;<br>
}<br>
$row = $data[$i];<br>
foreach ($row as $key => $value) {<br>
$row[$key] = iconv('utf-8', 'gbk', $value);<br>
}<br>
fputcsv($fp, $row);<br>
}<br>
}<br>
fclose($fp);<br>
}
更多【乾貨分享】,請關注PHP工程師訂閱號。