首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fputcsv在最后一个元素上添加一行。

问fputcsv在最后一个元素上添加一行。
EN

Stack Overflow用户
提问于 2013-11-15 17:18:38
回答 4查看 6.5K关注 0票数 1

我有一个基本的PHP脚本,它从数组中创建一个csv文件。下面是代码的一个示例:

代码语言:javascript
复制
$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)。这是我更新的脚本,如果有人感兴趣的话:

代码语言:javascript
复制
$array = [
    [1,2,3],
    [4,5,6]
];

$handle = fopen('test.csv', 'w');

foreach($array as $v)
    if($v != NULL)
        fputcsv($handle, $v);

fclose($handle);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-15 17:25:08

我在另一个问题上找到了这个解决方案:https://stackoverflow.com/a/8354413/1564018

代码语言:javascript
复制
$stat = fstat($handle);
ftruncate($handle, $stat['size']-1);

我在fputcsv()之后添加了这两行,它们删除了最后一个新的行字符,删除了文件末尾的空行。

票数 9
EN

Stack Overflow用户

发布于 2018-11-14 02:15:56

在结束时,在fclose(句柄)之后添加exit();

票数 2
EN

Stack Overflow用户

发布于 2013-11-15 17:27:59

就像@Barmar说的,所有行都有一个行的结尾,比如说\n,文件末尾的空行就是编辑器这样做的。一个真正的空行是连续的两个行结束字符.(例如\n)

假设您有一个空白文件:

代码语言:javascript
复制
(EOF)

如果fputcsv如下:数组(0,"hello",3323)

代码语言:javascript
复制
(0,hello,3323\nEOF)

给定PHP文档:

fputcsv()将一行(作为字段数组传递)格式化为CSV,并将其写入指定的文件句柄(以换行符结尾)。

那么,您的编辑器中应该有一个空行。但在档案里没有这样的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20006871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档