这两天业务基本做完 弄后台的时候用了xls表格导出
我大奔哥说 这个导出的量少 ,推荐使用 csv 表格导出
于是我研究了一下,发现还确实是,更关键的是 代码量变少了
这个代码
/**
* Inf csv文件输出
* Argument :
* User: 伍先生
* DateTime: 2020/2/20 11:06
* Function: csvsend
*/
function csvsend($dataArr,$head,$title){
//设置表名
header('Content-Type: application/vnd.ms-excel'); //header设置
header("Content-Disposition: attachment;filename=".$title.".csv");
header('Cache-Control: max-age=0');
//打开php文件句柄,php://output表示直接输出到PHP缓存,a表示将输出的内容追加到文件末尾
$fp = fopen('php://output','a');
//设置表头
foreach($head as $k=>$v){
$head[$k] = iconv("UTF-8","GBK//IGNORE",$v); //将utf-8编码转为gbk。理由是: Excel 以 ANSI 格式打开,不会做编码识别。如果直接用 Excel 打开 UTF-8 编码的 CSV 文件会导致汉字部分出现乱码。
}
fputcsv($fp,$head); //fputcsv() 函数将行格式$head化为 CSV 并写入一个打开的文件$fp。
foreach($dataArr as $key=>$data){
foreach($data as $i=> $item){ //$item为一维数组哦
$ss = $item."\t";
$data[$i] = iconv("UTF-8","GBK//IGNORE",$ss); //转为gbk的时候可能会遇到特殊字符‘-’之类的会报错,加 ignore表示这个特殊字符直接忽略不做转换。
}
fputcsv($fp,$data);
}
fclose($fp);
exit;
}调用就更简单了
$data = [
["name"=>"张三",'age'=>18,"sex"=>1],
["name"=>"李四",'age'=>18,"sex"=>2]
];
$title = "学生信息";
$header =['姓名',"年龄",'性别'];
csvsend($data,$header,$title);
程序员,产品 9.1 PHP Go 前端 JwCode 渐悟分享