首页 > 解决方案 > 如何每批读取文件 .csv

问题描述

我有一个问题,所以我的 .csv

"product";"date";"q"
"8";"1995-05-01";"4"
"8";"1995-05-01";"2"
"8";"2001-05-01";"13"
"8";"2001-05-01";"3"
"9";"1995-05-01";"1"

我有大约 100 万行。我正在做这样的事情:

while (($row = fgetcsv($fpointer, 4096, ";")) !== false) {
     $data[$row[0]][$row[2]][] = $row;
}

但是这个过程会消耗大量的内存。我怎么能以其他方式做?请帮我。

标签: phpcsvphp-5.3

解决方案


这是因为您使用的内存超过了限制,在处理非常大的数据集时,不要读取所有内存然后再处理。您可以在循环中批量处理数据,例如:

$limit = 0;
$data = [];

while($row = fgetcsv($fpointer, 4096, ";")) {
    $limit++;
    $data[$row[0]][$row[2]][] = $row;

    if (1000 <= $limit) {
        // process your data
        $data = [];
        $limit = 0;
    }
}

推荐阅读