首页 > 解决方案 > LimitIterator 偏移量 1 和 2 个元素

问题描述

我面临的问题是我有一个读取 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 行,它不起作用。

任何想法?

谢谢。

标签: phpcsv

解决方案


就个人而言,我会为此使用 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];
        }
    }
}

循环意味着您每次都可以跳过第一行,并且可能为此使用更少的资源,因为您没有那么多的对象漂浮在周围

php.net页面也应该可以帮助您


推荐阅读