php - 高效读取大文本文件

标签 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);

.. 但我不断从我的虚拟主机那里收到内存过载消息。如何更有效地阅读它?

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

最佳答案

如果您知道 key ,为什么不按 key 过滤掉呢?您可以使用 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";

关于php - 高效读取大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29288206/

相关文章:

php - 写入数据库时​​出错

php mysql 按日期排序(最近)

performance - Redmine 性能不一致

performance - 尝试实现类似 XMPP 的协议(protocol)的 IIS 性能问题

java - 如何按数字顺序获取文件夹中的文件名 | java

c - 如何使用用户输入打开文本文件,然后将其加载到二维数组中?

php - JavaScript 函数行为不正确

php - 在 docker 中运行 laravel 队列 worker

c - 内存复制基准测试的吞吐量分析

c - 如何读取文件中间的变量