php - 如何每批读取文件 .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;
}
但是这个过程会消耗大量的内存。我怎么能以其他方式做?请帮我。
解决方案
这是因为您使用的内存超过了限制,在处理非常大的数据集时,不要读取所有内存然后再处理。您可以在循环中批量处理数据,例如:
$limit = 0;
$data = [];
while($row = fgetcsv($fpointer, 4096, ";")) {
$limit++;
$data[$row[0]][$row[2]][] = $row;
if (1000 <= $limit) {
// process your data
$data = [];
$limit = 0;
}
}