fputcsv是导出合并后二维数组为csv最快最稳方案,自动转义特殊字符、低内存、兼容excel;须写bom防中文乱码、用php://output、清空缓冲、避免手动拼接。

用 fputcsv 导出合并后的数组到 CSV 最快最稳
只要你的合并结果是二维数组(比如 $data = [['张三', '25'], ['李四', '30']]),fputcsv 就是首选。它不依赖外部库、内存占用低、生成的 CSV 兼容 Excel 和 WPS,且能自动处理含逗号、换行、引号的字段。
常见错误现象:直接 echo implode(',', $row) 拼接,导致含逗号的姓名(如“王,小明”)被 Excel 错切为两列;或中文乱码没设 UTF-8 BOM。
- 必须在
fopen('php://output', 'w')后立即写入 BOM 头:fputs($fp, "\xEF\xBB\xBF");(否则 Excel 打开中文会乱码) - 表头和数据都要用
fputcsv($fp, $row)写入,别手动fwrite - 导出前清空输出缓冲:
ob_end_clean();,否则 header 可能失效 - 文件名带中文时,
Content-Disposition中的 filename* 参数要 URL 编码,但更稳妥的做法是用英文名 + 中文注释(如filename="export_20260831.csv")
用 PhpSpreadsheet 导出合并后数据并控制格式
当你需要合并单元格、加粗标题、自适应列宽、或导出 .xlsx 而非 .csv 时,PhpSpreadsheet 是唯一靠谱选择。注意它不能直接“合并数组”,而是把合并好的二维数组填进工作表,再调用 mergeCells() 等方法做样式操作。
容易踩的坑:大数组(>5000 行)直接 fromArray() 容易 OOM;合并单元格时行列范围写错(如 'A1:A3' 写成 'A1:A4')导致 Excel 打不开。
- 大数据量务必分批写入:
for ($i = 0; $i fromArray(array_slice($data, $i, 1000), null, "A".($i+2)); } - 合并客户名称这类重复字段:先遍历找连续相同值的起止行,再调用
$sheet->mergeCells("A{$startRow}:A{$endRow}"); - 设置 UTF-8 字体避免中文方块:
$sheet->getStyle('A1:Z'.$maxRow)->getFont()->setName('Microsoft YaHei'); - 导出前关闭公式预计算:
$spreadsheet->setCalculationEngine(new \PhpOffice\PhpSpreadsheet\Calculation\Calculation());(可省 30% 内存)
导出前合并多个数组的典型场景和写法
实际业务中,“合并数据”常指把不同来源的数组对齐拼成二维表,比如用户基本信息 + 订单数 + 最近登录时间。这不是简单 array_merge,而是按主键(如 user_id)关联。
错误做法:用 array_merge_recursive 直接合并,会导致键冲突、结构错乱;或用嵌套 foreach 手动查重,性能差且易漏。
- 若两个数组都有
id字段,用array_column($arr1, null, 'id')建索引,再循环$arr2查找匹配项 - 字段名不一致(如
$arr1['uid']vs$arr2['user_id']),先统一键名再合并,别硬套array_map - 有缺失数据(某用户无订单),补空值:
$row['order_count'] = $orders[$uid]['count'] ?? 0; - 导出 JSON 供前端用?别用
json_encode($merged)就完事——加JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT提高可读性
导出失败时优先检查这三点
90% 的导出失败不是代码逻辑问题,而是环境或协议细节被忽略。
-
headers already sent:检查是否有echo、print、甚至文件末尾多了一个空行,在header()前输出任何内容都会崩 - Excel 打开报“发现不可读取的内容”:通常是 UTF-8 BOM 缺失(CSV)或
mergeCells范围越界(XLSX) - 导出文件为空:确认脚本没提前
exit或die,且fclose($fp)或$writer->save('php://output')已执行
合并本身只是中间步骤,导出成败关键在输出流控制和格式边界。尤其当数据来自多个数组、含中文、需合并单元格时,BOM、索引对齐、内存分片这三件事漏一个,就卡在最后一步。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











