如何在使用PHP SplFileObject和READ_CSV标志时删除额外的行



当使用PHP SplFileObject和READ_CSV标志迭代csv文件时,我得到一个null值的额外行。有办法自动删除这条线吗?

$file = new SplFileObject(__DIR__.'/technologies.csv', 'r');
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
    var_dump($row);
}

这将产生一个null值的行。

...
array(1) {
  [0] =>
  NULL
}

您还需要设置SplFileObject::SKIP_EMPTY标志,并为此设置SplFileObject::READ_AHEAD标志。

SplFileObject::SKIP_EMPTY标志做了它在锡上说的:它跳过空行。文件中的尾随换行符视为空行。

(旁白:SplFileObject::READ_AHEAD是必需的,这样SplFileObject::SKIP_EMPTY才能完成它的工作。下一行需要在内部读取,以便PHP可以确定它是否为空。


所以,你的代码看起来像(换行成多行以便你可以阅读):
$file->setFlags(SplFileObject::READ_CSV |
                SplFileObject::SKIP_EMPTY |
                SplFileObject::READ_AHEAD);

我正在使用PHP 8.0.18 &为了跳过空行,我不得不再添加一个标志,如SplFileObject::DROP_NEW_LINE。最后的代码看起来像;

$file->setFlags(
            SplFileObject::READ_CSV |
            SplFileObject::SKIP_EMPTY |
            SplFileObject::DROP_NEW_LINE |
            SplFileObject::READ_AHEAD
        );

最新更新