我有一个基本的PHP脚本,它从数组中创建一个csv文件。下面是代码的一个示例:
$array = [
[1,2,3],
[4,5,6]
];
$handle = fopen('test.csv', 'w');
foreach($array as $v)
fputcsv($handle, $v);
fclose($handle);生成的文件在文件末尾总是有一个空行,因为fputcsv不知道这是最后一行。对于如何防止这种情况,有什么(简单的)想法吗?
编辑:
原来的问题现在已经无关紧要了(对我来说,也许有人需要这样做)。fputcsv应该添加一个新行,即使在文档的末尾,这也是所有csv文件的预期行为。
我标记的答案解决了原来的问题,尽管它不再与我相关。
因此,在我的上下文中,我需要检查数组的最后一行(或任何一行)是否为空(否则PHP将通过一个警告fputcsv的第二个参数为null)。这是我更新的脚本,如果有人感兴趣的话:
$array = [
[1,2,3],
[4,5,6]
];
$handle = fopen('test.csv', 'w');
foreach($array as $v)
if($v != NULL)
fputcsv($handle, $v);
fclose($handle);发布于 2013-11-15 17:25:08
我在另一个问题上找到了这个解决方案:https://stackoverflow.com/a/8354413/1564018
$stat = fstat($handle);
ftruncate($handle, $stat['size']-1);我在fputcsv()之后添加了这两行,它们删除了最后一个新的行字符,删除了文件末尾的空行。
发布于 2018-11-14 02:15:56
在结束时,在fclose(句柄)之后添加exit();
发布于 2013-11-15 17:27:59
就像@Barmar说的,所有行都有一个行的结尾,比如说\n,文件末尾的空行就是编辑器这样做的。一个真正的空行是连续的两个行结束字符.(例如\n)
假设您有一个空白文件:
(EOF)如果fputcsv如下:数组(0,"hello",3323)
(0,hello,3323\nEOF)给定PHP文档:
fputcsv()将一行(作为字段数组传递)格式化为CSV,并将其写入指定的文件句柄(以换行符结尾)。
那么,您的编辑器中应该有一个空行。但在档案里没有这样的东西。
https://stackoverflow.com/questions/20006871
复制相似问题