csv其實是文本文件,但是里面的內容是利用逗號分隔的。
1. 生成csv文件
1 function new_csv($arr) 2 { 3 $string=""; 4 foreach ($arr as $key => $value) 5 { 6 foreach ($value as $k => $val) 7 { 8 $value[$k]=iconv('utf-8','gb2312',$value[$k]); 9 } 10 11 $string .= implode(",",$value)."\n"; //用英文逗號分開 12 } 13 $filename = date('Ymd').'.csv'; //設置文件名 14 header("Content-type:text/csv"); 15 header("Content-Disposition:attachment;filename=".$filename); 16 header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 17 header('Expires:0'); 18 header('Pragma:public'); 19 echo $string; 20 }
2.讀取csv文件
網上許多封裝的方法都有中文亂碼問題,我這邊順手解決一下。
/* * 讀取CSV文件 * @param string $file csv文件路徑 */ function read_csv($file) { setlocale(LC_ALL, 'zh_CN');//linux系統下生效 $data = null;//返回的文件數據行 if (!is_file($file) && !file_exists($file)) { die('文件錯誤'); } $cvs_file = fopen($file, 'r'); //開始讀取csv文件數據 $i = 0;//記錄cvs的行 while ($file_data = fgetcsv($cvs_file)) { $i++; // if ($i == 1) { // continue;//過濾表頭 // } $res = array(); if ($file_data[0] != '') { foreach ($file_data as $val){ $val = mb_convert_encoding($val, "UTF-8", "GBK"); $res[] = $val; } $data[$i] = $res; } } fclose($cvs_file); return $data; }
是否需要過濾表頭自己選擇,默認不過濾
如果還有中文亂碼問題,那么用下面這個
function read_csv($file) { setlocale(LC_ALL, 'zh_CN');//linux系統下生效 $data = null;//返回的文件數據行 if (!is_file($file) && !file_exists($file)) { die('文件錯誤'); } $cvs_file = fopen($file, 'r'); //開始讀取csv文件數據 $i = 0;//記錄cvs的行 while ($file_data = fgetcsv($cvs_file)) { $i++; if ($file_data[0] != '') { $data[$i] = $file_data; } } fclose($cvs_file); return $data; }
