$k=array("i","n");
$row="iphone";
$row = preg_replace("/($k[0])/i", "<font color=red><b>\\1</b></font>", $row);
$row = preg_replace("/($k[1])/i", "<font color=red><b>\\1</b></font>", $row);
echo $row;
//输出 nt color=red>int>phone
//怎么样才能让关键字也就是$k里面的字母变为红色的?不重复替换?

解决方案 »

  1.   

    $k=array("i","n");
    $p= join('',$k);
    $row="iphone";
    echo  preg_replace("/[".$p."]/i", "<font color=red><b>\\0</b></font>", $row);
      

  2.   

    我写的完整的关键词替换功能,防止标签的title、alt被替换/*
    * 将关键词数组按长度排序
    */
    function replaceKeywordsSub($v1,$v2){
    if(is_string($v1)){
    if(is_string($v2)){
    return strlen($v1) < strlen($v2);
    }elseif(is_array($v2)){
    return strlen($v1) < strlen($v2['word']);
    }
    }elseif(is_array($v1)){
    if(is_string($v2)){
    return strlen($v1['word']) < strlen($v2);
    }elseif(is_array($v2)){
    return strlen($v1['word']) < strlen($v2['word']);
    }
    }
    }
    function replaceKeywords($aKey,$html){
    if(!is_array($aKey) || count($aKey)==0)
    return $html;
    //替换掉所有的链接,以防止A标签的嵌套
    if(preg_match_all('#<a[^>]+>.*</a>#iuU',$html,$matchs)){
    list($tagLinks)=$matchs;
    foreach($tagLinks as $link){
    $html=str_replace($link,'/$link'.md5($link).'$/',$html);
    }
    print_r($matchs);
    }
    //替换掉所有其他标签
    if(preg_match_all('#<[^>]+>#iuU',$html,$matchs)){
    list($tags)=$matchs;
    foreach($tags as $tag){
    $html=str_replace($tag,'/$tag'.md5($tag).'$/',$html);
    }
    }
    // 按照关键词长度对数组重新派讯
    uasort($aKey,'replaceKeywordsSub');
    foreach($aKey as $w){
    if(is_string($w) && $w = strip_tags(trim($w)))
    $html=preg_replace('/'.$w.'/','/*'.md5($w).'*/',$html,1);//只替换一次
    elseif(is_array($w))
    $html=preg_replace('/'.$w['word'].'/','/*'.md5($w['word']).'*/',$html,1);
    }
    foreach($aKey as $w){
    if(is_string($w) && $w = strip_tags(trim($w))){
    $r = "<a href=\"search.html?q=".rawurlencode($w)."\" target=\"_blank\" class=\"keyword_link\">{$w}</a>";
    $html=str_replace('/*'.md5($w).'*/',$r,$html);
    }elseif(is_array($w)){
    if($w['url']=='')
    $r = "<a href=\"search.html?q=".rawurlencode($w['word'])."\" target=\"_blank\" class=\"keyword_link\">{$w['word']}</a>";
    else
    $r = "<a href=\"{$w['url']}\" target=\"_blank\" class=\"keyword_link\">{$w['word']}</a>";
    $html=str_replace('/*'.md5($w['word']).'*/',$r,$html);
    }
    }
    //恢复所有标签,除A标签
    if($tags){
    foreach($tags as $tag){
    $html=str_replace('/$tag'.md5($tag).'$/',$tag,$html);
    }
    }
    //恢复A标签
    if($tagLinks){
    foreach($tagLinks as $link){
    $html=str_replace('/$link'.md5($link).'$/',$link,$html);
    }
    }
    return $html;
    }
    //用法如下:
    $aKey = array(
    array('word' => '中国','url' => 'http://www.gov.cn/'),
    array('word' => '共和国'),
    array('word' => '中华'),
    array('word' => '人民'),
    array('word' => '共和'),
    array('word' => '中华人民共和国'),
    );
    $html = '中华人民共和国简称<a href="abc.php?中华人民共和国" title="中华人民共和国">中国</a>,位于欧亚大陆东部,太平洋西岸。中国具有五千年的文明史,是世界四大文明古国之一。中国是联合国安全理事会常任理事国;世界第二大经济体;世界第一大出口国,世界第二大进口国,拥有最多外汇储备;亦是世界上经济成长最快的国家之一。另外,中国拥有世界上现役士兵最多的军队,军事开支世界第二;拥有核武器,并具备发射卫星、载人航天器以及试验型空间站的能力。不过中国的生产力总体水平还比较低,地区发展不平衡;科学技术水平和民族文化素质等还不够高,这些亦为最基本的现实国情。';
    echo replaceKeywords($aKey,$html);
      

  3.   

    你的算法太复杂,且效率不高,的考虑 Trie 了