我正在将文件加载到 PHP 中的数组中。我正在将文件加载到一个数组中,因为它是一个字典,我想利用二进制搜索来查找我的单词是否在字典中。由于那里有一些不同的信息,我已经尝试了这两种不同的方法。它们的时间非常相似,出于某种原因,我的 1.1MB 文件导致 PHP 使用 20MB 内存。
方法一:
<?php
echo 'Memory Usage Start: ' . memory_get_usage() . '<br>';
$start = microtime(true);
$fs=fopen("./dictionary.txt", "r");
$dictionary=array();
while (!feof($fs)){
$dictionary[]=trim(fgets($fs));
}
$end = microtime(true);
echo 'Memory Usage End: ' . memory_get_usage() . '<br>';
echo 'Total Time: ' . ($end - $start) . ' seconds';
输出是:
Memory Usage Start: 5298144
Memory Usage End: 25254944
Total Time: 0.17744994163513 seconds
方法二:
<?php
echo 'Memory Usage Start: ' . memory_get_usage() . '<br>';
$start = microtime(true);
$dictionary = file('./dictionary.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$end = microtime(true);
echo 'Memory Usage End: ' . memory_get_usage() . '<br>';
echo 'Total Time: ' . ($end - $start) . ' seconds';
输出是:
Memory Usage Start: 5297240
Memory Usage End: 25244920
Total Time: 0.074188947677612 seconds
PHP 中的数组的开销似乎比我想象的要大得多。我想我能想到的一种解决方案是解析到文件的中间并读取该行,然后以这种方式进行二进制搜索。然而,进行如此多的文件读取以找到一个值似乎效率低得多。
无论如何,任何见解将不胜感激。