+ -
当前位置:首页 → 问答吧 → 请各位路过的老师,帮我完善一下这个算法,谢谢了。

请各位路过的老师,帮我完善一下这个算法,谢谢了。

时间:2011-09-23

来源:互联网

在网上寻找了大量的海量关键字替换思路,感觉这个不错,(http://hi.baidu.com/songlv2002/blog/item/84a98759b362d5d59d82043b.html)但是算法问题老是出错,自己却找不出来原因,请各位老师指点一下,
想实现的功能是,如果文章内容中出现关键字,则把其加上链接,并且只加一次,如果有类似(中国,中国人)类似的两个关键字,先把长度长的加上链接,如果短的关键字也存在,而也加上链接,并且只加一次,例如:
$g_keywords = array("中国"=>"http://中国","中国人"=>"http://中国人","成功了"=>"http://成功了");
$article = "中国人你好吗?中国最强大,我要成功了。";
$keywords = inIt($g_keywords );
replace($article,$keywords)应当得到结果:<a href='http://中国人'>中国人</a>你好吗?<a href='中国'>中国</a>最强大,我要<a href='http://成功了'>成功了</a>。
PHP code

header("content-type:text/html;charset=UTF-8");
function inIt($keywords)
{
    $g_keywords = array();
    foreach($keywords as $key=>$val)
    {
        $temp='$g_keywords';
        $len=strlen($key);    
        for($i=0;$i<$len;$i++){
            $temp.="['".$key{$i}."']";
        }
        eval($temp.="['val']='{$val}';");
    }
    return $g_keywords;
}
function replace($article,$keywords)
{
    $len=strlen($article);
    for($i=0;$i<$len;$i++)
    {
        $returnArr = find($article,$keywords,$i);
        $pos = $returnArr["pos"];
        $url = $returnArr["url"];
        if($pos)
        {
            $addLength = strlen("<a href='{$url}>'</a>");
            $article = substr($article,0,$i) . "<a href='{$url}'>" .  substr($article,$i,$i+$pos) ."</a>" . substr($article,$i+$pos,$len);
            $i   = $i+$pos+$addLength;
            $len = $len+$addLength;
        }
    }
    echo $article;
}
function find($article,$keywords,$i,$pos=1)
{
    $returnArr = array();
    $returnArr["pos"] = false;
    $returnArr["url"] = false;
    if(!isset($article{$i})) 
    {
        return $returnArr;
    }
    if(isset($keywords[$article{$i}]['val']))//可以再加一个条件让其只替换最长的关键字count($keywords[$article{$i}])==1,但短的关键字就没办法替换了
    {
        $returnArr["pos"] = $pos;
        $returnArr["url"] = $keywords[$article{$i}]['val'];
        return $returnArr;
    }
    if(!isset($keywords[$article{$i}]))
    {
        return $returnArr;
    }
    $keywords=$keywords[$article{$i}];
    return find($article,$keywords,$i+1,$pos+1);
}
$g_keywords = array("中国"=>"http://中国","中国人"=>"http://中国人","成功了"=>"http://成功了");
$article = "中国人你好吗?中国最强大,我要成功了。";
$keywords = inIt($g_keywords );
replace($article,$keywords)


作者: lovewangya   发布时间: 2011-09-23

基本算法就是贪心算法似的,先搜索长的

作者: yangball   发布时间: 2011-09-23

热门下载

更多