php导出csv文件方法封装
程序员文章站
2022-05-26 19:15:34
...
/**
* 导出csv文件
* @param string $filename 导出文件名
* @param array $field 第一行header
* @param array $map 字段映射,array('title'=>function($v){})
* @param array $list 导出数据
* @return [type] [description]
*/
function exportCsv($filename, $field, $map, $list)
{
header('Content-Disposition: attachment;filename='.$filename);
header('Content-Type: application/vnd.ms-excel');
header('Cache-Control: max-age=0');
header("Accept-Ranges:bytes");
$out = fopen('php://output', 'w');
fputcsv($out, $field);
$limit = 5000;
$num=0;
foreach($list as $k=>$v){
// 每隔一段数据清除输出缓存
if($k == $limit){
ob_flush();
$num=0;
}
$num+=1;
$tmp = array();
foreach($map as $k1=>$v1){
if(isset($v[$k1]) && (is_callable($map[$k1]) || $map[$k1] instanceof Closure)){
$tmp[$k1] = $v1($v);
}else{
$tmp[$v1] = $v[$v1];
}
}
array_unshift($tmp, $k+1);
fputcsv($out, $tmp);
// 每次写入后销毁变量
unset($tmp, $list[$k]);
}
fclose($out);
die();
}
// 实际使用
$filename = 'test.csv';
$field = array(
'列头1',
'列头2',
'列头3'
);
$extra = '测试1';
$map = array(
'title1' => function($v){
return 'test1';
},
'title2',
'title3' => function($v)use(&$extra){
return $extra.'--'.$v['title1']
}
);
$data = array(
array(
'title1' => '111',
'title2' => '222',
'title3' => '333',
),
);
exportCsv($filename, $field, $map, $data);
上一篇: 模型实例_逻辑回归
下一篇: tensorflow分布式训练