PHP skip lines while reading

前端 未结 3 845
面向向阳花
面向向阳花 2021-01-22 15:58

I am trying to find a quick way of reading from a csv file, by first skipping a number of lines, reading about 20 lines, then stopping the read. the only solution right now is u

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-22 16:36

    The only way to scroll through a CSV that respects the particular CSV format is to invoke a parser. The fastest CSV parser is the built in fgetcsv. Thus, that's going to be fastest of all possible reliable methods:

    function csv_slice($fp, $offset = 0, $length = 0) {
        $i = 0;
        while (false !== ($row = fgetcsv($fp))) {
            if ($i++ < $offset) continue;
            if (0 < $length && $length <= ($i - $offset - 1)) break;
            yield $row;
        }
    }
    

    Used like:

    $fp = fopen('file.csv', 'r');
    print_r(
        iterator_to_array(
            csv_slice($fp, 5, 2) // start after 5th row, return 2 rows
        )
    );
    fclose($fp);
    

    I've used generators here to keep the memory consumption low. You can easily replace with a temporary array if you prefer.

    If you can make some assumptions about line endings, then you can just read byte-by-byte until you found the range of line endings. But, frankly, I wouldn't do that.

提交回复
热议问题