用生成器讀取大檔案

生成器的一個常見用例是從磁碟讀取檔案並迭代其內容。下面是一個允許你迭代 CSV 檔案的類。此指令碼的記憶體使用量非常可預測,並且不會根據 CSV 檔案的大小而波動。

<?php

class CsvReader
{
    protected $file;
 
    public function __construct($filePath) {
        $this->file = fopen($filePath, 'r');
    }
 
    public function rows()
    {
        while (!feof($this->file)) {
            $row = fgetcsv($this->file, 4096);
            
            yield $row;
        }
        
        return;
    }
}
 
$csv = new CsvReader('/path/to/huge/csv/file.csv');

foreach ($csv->rows() as $row) {
    // Do something with the CSV row.
}