fputcsv导出CSV时自动添加逗号至新行的问题排查
问题分析与解决方法
你用fputcsv的方式完全错了,这才导致生成的CSV格式混乱。
错误根源
fputcsv的第二个参数是单一行的列数据数组,而不是整个文件的所有行组成的数组。你现在把已经拼接好逗号和换行的整行字符串放进数组,传给fputcsv,函数会把每个字符串当成一个CSV单元格——为了转义里面的逗号和换行,自动给单元格套上双引号,再用逗号分隔这两个单元格,就出现了你看到的"HEAD1,HEAD2,HEAD3\n","VALUE1,VALUE2,VALUE3\n"这种结果。
正确写法
你需要把每一行的列数据拆成一维数组,然后逐行调用fputcsv写入:
// 定义表头:每个元素对应一列 $header = ["HEAD1", "HEAD2", "HEAD3"]; // 定义数据行:每个元素对应一列 $row = ["VALUE1", "VALUE2", "VALUE3"]; $fp = fopen('path_to/filename.csv', 'w'); // 写入表头行 fputcsv($fp, $header); // 写入数据行 fputcsv($fp, $row); // 记得关闭文件 fclose($fp);
额外说明
- 不需要手动在数据里加逗号、换行符,
fputcsv会自动根据你指定的分隔符(默认就是逗号)和换行符处理。 - 如果有多行数据,用循环遍历数据数组,逐行调用
fputcsv即可。
内容的提问来源于stack exchange,提问作者Thomas Henke
相关产品推荐
相关产品推荐

