我面临的问题是我有一个读取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行( header 和2行),但仅包含 header 和1行,则该代码效果很好。
任何想法?
谢谢。
最佳答案
就个人而言,我将使用fopen和fgetcsv函数,如下所示;
<?php
$handle = fopen("myFile.csv", "r");
if ($handle != false)
{
$header_row_handled = false;
while ($datarow = fgetcsv($handle, 0, ",")
{
if (!$header_row_handled)
{
$header_row_handled = true;
}
else
{
/* Whatever you need */
$dataparta = $datarow[0];
$datapartb = $datarow[1];
$datapartc = $datarow[2];
}
}
}
循环意味着您每次可以仅跳过第一行,并且可能会使用较少的资源,因为您没有 float 的对象太多
php.net page也应该为您提供帮助