不要用现有函数来替换。将关键词表长驻内存,自己写一个for循环来做这个替换会快很多。

解决方案 »

  1.   

    当然str_replace的参数可以使用数组。我相信既然允许数组,php的开发者就肯定对批量替换做了优化。不知道你现在是不是用的这种方法更新。如果你用的是多次str_replace,可以先改为一次replace(数组)的方式试试。
      

  2.   

    我的意思是你试试把关键词表写成一个文件不要放进数据库。$src=array(
    '一个地址',
    '两个地址',
    '三个地址',
    ...........
    );
    $des=array(
    '<a href="">一个地址</a>',
    '<a href="">两个地址</a>',
    '<a href="">三个地址</a>',
    ...........
    );假设php对替换函数有优化的话就直接用就可以了。
    $str=str_replace($src,$des,$str);如果速度还是不理想可以考虑自己写替换函数。
      

  3.   

    字符串替换算法网上很多,可去google搜索。这里写个简单的。假设有关键字 abc,aefae,aefaw,b......,写成类似下列格式$key=array(
    'a'=>array('bc'=>1,'efae'=>1,'efaw'=>1),
    'b'=>array(..........)
    );$new_str='';
    for($i=0;$i<str_len($str);$i++){
    if(!isset($key[$str[$i]])) $new_str.=$str[$i];
    else{
      深入判断是否有匹配项,有则$new_str.=匹配顶,并$i+=替换字符数
    }
    }如果关键字分组后还是特别多,可以多加几层,并用hash编码优化查询。