当使用phpSplFileObjectREAD_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标志执行它在tin上所说的操作:它跳过空行。文件中的尾随换行符将被视为空行。
(旁白:SplFileObject::READ_AHEAD是必需的,这样SplFileObject::SKIP_EMPTY才能完成它的工作。需要在内部读取下一行,以便php可以确定它是否为空。)
因此,您的代码看起来像(被包装成多行以便您可以阅读):

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

08-18 14:03