【发布时间】:2016-03-08 18:52:21
【问题描述】:
我想就这项任务寻求帮助: 我有大 CSV:680 列 x 1300 行,我需要按列解析它(我需要有列值数组的数组)。
我为此使用此代码:
$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);
问题是,我得到了这个错误
致命错误:/www/classes/Analyser.php 第 72 行中允许的内存大小为 134217728 字节已用尽(尝试分配 16384 字节)
第 72 行是 $this->columns[$i][] = $data[$i];
我的主机不允许我增加内存限制。有没有办法高效地编写代码,所以不需要那么多内存,还是只是这么大的CSV的问题?
谢谢大家。
【问题讨论】:
-
您的问题是试图将一个大的 csv 文件读入内存。如果您想逐列而不是逐行解析它,那么您可能需要多次读取 csv,每列一次,构建仅包含该列的数组,处理它,然后倒带并重复下一列
-
是的,我明白了。请问您可以编辑我的代码以读取每列的csv一次,处理它并再次读取吗?我正在尝试,但它不起作用。非常感谢
标签: php parsing csv memory-leaks