while($v = current(词库数组))
{
while($v_h = current(要搜索的文本数组))
{
  /* if(strpos($v_h,$v))
   {


   }*/
   next($this->html_array);
}
reset($this->html_array);
next($this->word);
}我的词库有四万多个词吧,文本只有八个每个有三四百字吧我如果不要注视的部分只要三秒,如果要就的要十三秒,请问谁知道有什么方法可以提高这个速度吗?谢谢了

解决方案 »

  1.   

    二进制编码+散列
    不知道你IF 里执行的什么,
    如果是替换
    PHP 可以直接 用preg_replace如果是mysql 可以直接
    update + 触发器
      

  2.   

    按照你的特定需求和应用状况,提供个思路,不见得比之前的方案快: 首先从词库里构建一个多维数组
    array(
      char1-1: array(char2-1: array(),char2-2: array()),
      char1-2: array(),
    );
    遍历词库,选取第一个字母(如果包括中文,请使用mbstring并正确设置mb_internal_encoding确保无误)作为关键字,并创建二级数组。
    二级数组同样选取第二个字母作为关键字,字符串全文作为值。其后遍历文本数组,对每个文本查找词库数组的第一个字母,如果没查到则继续下一个。
    查到则取查找到的位置的下一个字母,并据此选择词库数组中的关键字列表进行匹配(substr)。 无法匹配则继续查找文本内的下一个该字母。
    这里有一个变种方案可以避免检查一些当字串里包含多个特定的前缀字母时的性能损失:查找到,则以该位置开始,strpos查找其下2层所有关键字。这样也就没有需要继续查本文本内下一个该字母的必要了。该算法是否有效取决于文本内的前缀字符分布密度,糟糕的情况下也许比之前的方案还要慢些。
    更好的做法当然是根据词库对文本进行分词,分词过程中就能知道一个词是否存在于词库中了。当然,算法也更复杂了。