fgetcsv跳过文件中的空白行

hyp*_*ert 10 php fgetcsv

我有这个脚本,它基本上抓住了我的"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 ));
?>
Run Code Online (Sandbox Code Playgroud)

Tom*_*ers 18

正如您可以在以下文档中fgetcsv()阅读:

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

在将其添加到数据阵列之前检查它应该就足够了:

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

  • 此解决方案不会捕获不包含任何值的“空”csv 行的情况,例如 ',,,,,,,,,' 将被转换为具有空字符串值的数组 (2认同)
  • @皮特你说得对。我将要使用此解决方案,但在测试时无法使用。在这种情况下,您可以使用以下问题的可接受答案:/sf/ask/352856801/ (2认同)

rub*_*dio 5

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

if ($result[0] == NULL)
    continue;
Run Code Online (Sandbox Code Playgroud)