表头数组格式如下:
$header = array(
0 => "id",
1 => "用户名称",
2 => "用户性别",
3 => "金额"
);
表数据格式如下:
$data = array(
/* 第一行 */
0 => array(
0 => 1, // id
1 => "xiaoming", // 用户名称
2 => '男', // 用户性别
3 => 100
),
/* 第二行 */
0 => array(
0 => 2, // id
1 => "xiaohong", // 用户名称
2 => '女', // 用户性别
3 => 200
),
...
);
调用函数代码:
function toCsv($filename, $header, $data, $arrayText = array(), $flag = 1) {
set_time_limit(120000);
ignore_user_abort(true);
ini_set('memory_limit', '2048M');
// 输出Excel文件头,可把user.csv换成你要的文件名
if (!headers_sent()) {
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '.csv"');
header('Cache-Control: max-age=0');
}
// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');
foreach ($header as $i => $v) {
// CSV的Excel支持GBK编码,一定要转换,否则乱码
$header[$i] = iconv('utf-8', 'gbk', $v);
}
// 将数据通过fputcsv写到文件句柄
if ($flag == 1) {
fputcsv($fp, $header);
}
// 逐行取出数据,不浪费内存
if (!empty($data) && is_array($data)) {
foreach ($data as $row) {
foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8', "gbk//IGNORE", $v);
if (in_array($i, $arrayText)) {
$row[$i] = "\t" . $row[$i];
}
}
fputcsv($fp, $row);
}
}
}