我面临的问题是我有一个读取CSV文件的SplFileObject,然后将其包装到LimitIterator中。
CSV文件有2行,标题和1行,我将LimitIterator偏移量设置为1,但我无法覆盖它,这似乎是索引的一些内部问题。
代码如下:
$csvFile = new \SplFileObject($fileName);
$csvFile->setFlags(\SplFileObject::READ_CSV);
$iterator = new \LimitIterator($csvFile, 1);
/** @var \LimitIterator $it */
foreach ($iterator as $it) {
list($.., $.., $..) = $it;
$result[] = [
...
];
}
return $result;
如果CSV包含3行(标头和2行),但仅包含标头和1行,则该代码将很好地工作。
有什么想法吗?
谢谢。
答案 0 :(得分:0)
我个人将使用以下的fopen和fgetcsv函数;
db.getCollection('collection').find(
{
$or: [
{users: { $type: [1, 16, 18, 19] } },
{users: { $regex: /^[0-9]+$/ }}
]
}
)
循环意味着您每次可以只跳过第一行,并且可能会使用较少的资源,因为您没有浮动的对象
php.net page也应该为您提供帮助
答案 1 :(得分:0)
这与 PHP 错误 65601 相关,建议添加 READ_AHEAD
标志可以解决此问题。经过测试并按您的预期工作。
$csvFile->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD);