请各位路过的老师,帮我完善一下这个算法,谢谢了。
时间: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
想实现的功能是,如果文章内容中出现关键字,则把其加上链接,并且只加一次,如果有类似(中国,中国人)类似的两个关键字,先把长度长的加上链接,如果短的关键字也存在,而也加上链接,并且只加一次,例如:
$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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28