【发布时间】:2013-06-05 01:39:25
【问题描述】:
我有一个 "words" 文件,大小约为 5.8 MB,其中包含 560,000 个单词。我正在使用它从连接在一起的字符串中获取真实的单词。
例如greenbananatruck 可以是这样的字符串。
我写这个函数是为了快速使用。但我无法让它比 0.5 秒 更快。我正在使用具有 8 核处理器、8GB RAM 的服务器。实际上cpu不是问题,问题是RAM。我需要能够在多个实例中快速有效地完成此过程。
public function wordSplitReal( $str ){
$words = array_filter( $this->dict, function($word) use(&$str) {
$pos = strpos( $str, $word );
if ( $pos !== false ){
$str = substr_replace($str, "", $pos, strlen($word));
return true;
}
return false;
} );
return $words;
}
这很简单,我实际上在做的是 "filtering" 数组 "dict" 仅包含给定字符串中的单词。 (我对多个单词不感兴趣。) Dict 是从最长到最短的单词进行预排序的。全部只有小写字母。 这个函数是使用单例的更大类的一部分。
任何帮助将不胜感激。
【问题讨论】:
-
数据库不是更适合这个吗?
-
不,我用资源测试了同样的东西,花了大约 3 倍的时间。
标签: php arrays performance load strpos