我面临的问题是我有一个读取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也应该为您提供帮助

10-08 12:20