PHP——将大型CSV解析成数组——内存大小耗尽


PHP - parse large CSV into array of arrays - memory size exhausted

我想寻求有关此任务的帮助:我有一个大的CSV:680列x1300行,我需要按列解析它(我需要列值数组)。

我使用这个代码:

$input = "data/input.csv";
    if (($handle = fopen($input, "r")) !== false) {
        $filesize = filesize($input);
        while (($data = fgetcsv($handle, $filesize, "$")) !== false) {
            for ($i = 0; $i < count($data); $i++) {
                $this->columns[$i][] = $data[$i];
            }
        }
        fclose($handle);

问题是,我得到这个错误

致命错误:允许的内存大小134217728字节已用尽(试图分配16384字节),位于/www/classes/Analyser.php的第72行

第72行是$this->columns[$i][]=$data[$i]

我的主机不允许我增加内存限制。有没有一种方法可以有效地编写代码,这样就不需要那么多内存,或者只是这么大的CSV的问题?

谢谢大家。

function analyze_column($column) {
    // do your work here
    return $the_results;
}
$a = 0;
$results = array();
while ($a < COUNT_OF_COLUMNS) {
    $column = Array();
    while (($data = fgetcsv($handle, $filesize, "$")) !== false) {
        array_push($column,$data[$a]);
    }
    $results[] = analyze_column($column);
    $a++;
}

看看PHP生成器。它们旨在解决这个问题。