当读取csv文件中的特定行时,我尝试将splFileObject :: fseek与fgetcsv一起使用.
要读取第2行(例如),我执行fseek(1)并使用fgetcsv读取,它给出第2行.
当我执行fseek(0)并使用fgetcsv读取时,我有第0行.
因此,以这种方式读取第1行存在问题. (我知道我可以连续阅读2行但不认为它很好).
我在2008年使用PHP 5.2.6:SplFileObject: fgetcsv after seek returns wrong line发现了这个问题.
我正在使用PHP版本5.4.19.
有没有人有关于此的一些信息?
这是有意的吗?
解决方法:
我知道这是一个很老的bug,但它仍然在bugs.php上打开
所以这里有一个我要分享的片段来实现相同的目标(至少在我的情况下有效)
function readBigCsv($path, $skip=1)
{
$file = new \SplFileObject($path, 'r');
$file->setFlags(\SplFileObject::READ_CSV);
$file->seek($skip);
while (!$file->eof()){
yield $file->current();
$file->next();
}
}