我想读取 CSV 数据文件,将其加载到数组中,对其进行编辑并将其写回到文件中。我已经能够通过 Stackoverflow 上的示例在一次迭代中完成此任务!谢谢。
问题是当我将新数据写回文件时,我尝试将编辑后的数组写回文件的两种方法都会在文件末尾添加换行符。这会在第二次加载 CSV 文件数据时产生问题。第二次读取会导致数组中出现空索引,从而在写入文件时导致错误。
示例#1:
foreach($editArray as $row) {
$writeStuff = implode(",", $row);
fwrite($file_handle, $writeStuff);
fwrite($file_handle, "\n");
}
示例#2:
foreach ($editArray as $row) {
fputcsv($file_handle, $row);
}
这是原始的csv数据:
1/1/16,Yes,No 1/2/16,No,Yes
当使用上面的代码编写时,它会生成带有添加换行符的数据:
1/1/16,Yes,No 1/2/16,No,Yes
第二次读取文件时,这个额外的新行会产生问题。我在 fputcsv()
或 implode()
上均出现错误。我相信这是因为第一次写入后第二次读取文件时换行引起的空索引。
我可以在 implode()
示例 #1 中的最后一个 fwrite()
上使用带有条件的 for 循环,但这看起来很笨拙,而且不是这样的去做吧。
也许有一种完全不同的方法来处理这个问题?
最佳答案
这是 fputcsv
的预期行为
fputcsv() formats a line (passed as a fields array) as CSV and write it (terminated by a newline) to the specified file handle.
由于所有行都以换行符终止,因此文件末尾将有一个额外的空行
您应该通过在处理之前检查该行是否为空来对第二次读取(最后一行会产生问题)进行修复。
关于PHP 写入文件时不带最后一个换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34864611/