我想寻求有关此任务的帮助:我有一个大的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生成器。它们旨在解决这个问题。