本篇文章更新時間:2019/11/12
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
CSV 檔案的結構很簡單,逗號或分號區隔內容,並且斷行字元為新一筆資料。 依此資料格式輸出即可做出一個 CSV 檔案。
大多數如果是客戶端自行留存的檔案,個人在實作上就不考慮留檔,所以不寫入檔案,直接輸出並即時下載給客戶端使用即可!
範例如下:
設定好輸出下載的檔名,將資料從資料庫取出,定義好 CSV 標頭的欄位,接著就是迴圈存入資料,最後輸出使用「,
」分隔的字串~
$filename = "BeingAGoodRDisDifficult-" . date("Y-m-d-H-i-s") . ".csv";
header('Pragma: no-cache');
header('Expires: 0');
header('Content-Disposition: attachment;filename="' . $filename . '";');
header('Content-Type: application/csv; charset=UTF-8');
$csv_arr[] = array('編號', '項目', '名稱', '時間');
$posts = $db->where('k', 0)->get('submission');
for ($i = 0; $i < count($posts); $i++) {
$p = $posts[$i];
$csv_arr[] = array(
$a = str_replace(',', '、', $p['a']),
$b = str_replace(',', '、', $p['b']),
$c = str_replace(',', '、', $p['c']),
$d = str_replace(',', '、', $p['d']),
);
}
for ($j = 0; $j < count($csv_arr); $j++) {
if ($j == 0) {
//輸出 BOM 避免 Excel 讀取時會亂碼
echo "\xEF\xBB\xBF";
}
echo join(',', $csv_arr[$j]) . PHP_EOL;
}
最值得注意的就是第一行的開頭,如果不輸出 BOM ,那微軟 Excel 會無法知道這檔案是什麼編碼,導致亂碼產生哦!
至於如果是要給程式分析用的,就不要加上那個標頭,避免判斷出錯,這個錯發生的讓你摸不著頭緒啊,一個看不到但卻會影響判斷結果的東西最可怕惹(切身之痛)XD
移除 BOM 的方法參考如下:
if (substr($line, 0, 3) == pack(CCC, 0xef, 0xbb, 0xbf)) {
$line = substr($line, 3);
}
需要請自取~