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;
}
来源:oschina
链接:https://my.oschina.net/u/4307176/blog/3597099