有效地读取大文本文件

3zz*_*zzy 5 php performance file

我有几个巨大的(11mb54mb)文件需要阅读以处理脚本的其余部分.目前我正在读取文件并将它们存储在一个数组中,如下所示:

$pricelist = array();
$fp = fopen($DIR.'datafeeds/pricelist.csv','r');
while (($line = fgetcsv($fp, 0, ",")) !== FALSE) { 
    if ($line) { 
        $pricelist[$line[2]] = $line;
    }
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)

..但我经常从我的webhost获取内存过载消息.我如何更有效地阅读它?

我不需要存储所有内容,我已经拥有与数组键完全匹配的关键字$line[2],我只需要读取一个数组/行.

Ugu*_*gur 5

如果您知道密钥,为什么不通过密钥过滤掉?您可以使用memory_get_usage()函数检查内存使用情况,以查看填充$ pricelist数组后分配的内存量.

echo memory_get_usage() . "\n";
$yourKey = 'some_key';
$pricelist = array();
$fp = fopen($DIR.'datafeeds/pricelist.csv','r');
while (($line = fgetcsv($fp, 0, ",")) !== FALSE) { 
    if (isset($line[2]) && $line[2] == $yourKey) { 
        $pricelist[$line[2]] = $line;
        break;
        /* If there is a possiblity to have multiple lines
        we can store each line in a separate array element
        $pricelist[$line[2]][] = $line;
        */
    }
}
fclose($fp);
echo memory_get_usage() . "\n";
Run Code Online (Sandbox Code Playgroud)