fgetcsv 跳过文件中的空白行

问题描述 投票:0回答:4

我做了这个脚本,它基本上抓取了我的“logs”文件夹中的所有文件并将它们全部合并到一个数组文件中,我唯一的问题是,有时如果有空行或空行,脚本就会中断!我怎样才能告诉它自动跳过空白行并转到下一个?空白行不一定位于顶部或底部!可能位于 csv 文件的中间

<?php
    $csv = array();
    $files = glob('../logs/*.*');
    $out = fopen("newfile.txt", "w");

    foreach($files as $file){
        $in = fopen($file, "r");

    while (($result = fgetcsv($in)) !== false)

        {   
            $csv[] = $result;
        }

        fclose($in);
        fclose($out);
    }

    print json_encode(array('aaData' => $csv ));
?>
php fgetcsv
4个回答
23
投票

正如您可以在 文档中阅读

fgetcsv()

CSV 文件中的空行将作为包含单个空字段的数组返回,并且不会被视为错误。

在将其添加到数据数组之前检查这一点就足够了:

while (($result = fgetcsv($in)) !== false) {
    if (array(null) !== $result) { // ignore blank lines
        $csv[] = $result;
    }
}

6
投票

这是经过 100% 测试、最简单的方法。解释是空行使 fgetcsv 返回一个非空数组,其中仅包含一个 null 元素。

if ($result[0] == NULL)
    continue;

2
投票

简而言之

$csv = array_map('str_getcsv', file($file_path, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES));

说明

  1. file
    将文件内容读取到数组中。
    FILE_SKIP_EMPTY_LINES
    将跳过文件中的空行。
  2. array_map
    会将函数
    str_getcsv
    应用于数组的每个元素。
    str_getcsv
    将解析输入的字符串中的字段
    csv
    格式化并返回包含字段的数组。

了解更多关于 str_getcsv

了解更多有关文件

的信息

了解更多关于 array_map


0
投票

当前接受的答案不考虑多列,其中额外的空行看起来更像

,,,,,
,而不仅仅是
NULL

要捕获空的单列案例和多列空案例,您可以执行以下操作:

while (($result = fgetcsv($in)) !== false) {
    if (empty(array_filter($result))) {
        continue; // Skip this iteration
    }
}

使用

array_filter
过滤掉所有空值,然后我们检查过滤后的数组是否为空(如果整行都是空值,就会出现这种情况)

© www.soinside.com 2019 - 2024. All rights reserved.