首页 > php教程 > php手册 > 正文

关键词高亮算法

php中文网
发布: 2016-06-07 11:42:43
原创
1870人浏览过

在搜索系统中,经常会有高亮搜索关键词的需要,而在关键词不止一个且容易重叠的时候,普通的关键词高亮算法就容易出错了。所以这里介绍一下我自己想到的算法。如果有问题可以给我发邮件~ Email:me@filowlee.com
    /**<br>      * 设置关键词高亮的字符串处理函数<br>      * @param [string] $str      [要高亮的字符串]<br>      * @param array  $word_arr [关键词]<br>      */<br>     public function setKeyWords($str,$word_arr=array()){<br>         // 设置多字节字符内部编码为utf8<br>         mb_internal_encoding("UTF-8");<br>         // 创建一个跟字符串长度一致的数组,用0填充<br>         $map=array_fill(0,mb_strlen($str),0);<br>         // 遍历关键词数组,将关键词对应的map数组的位置上的数字置为1<br>         foreach ($word_arr as $value) {<br>             $pos=-1;<br>             $pos_count=0;<br>             $pos_arr=array();<br>             // 如果找到了这个关键词,就将这个词的位置存入位置数组中(来支持多次出现此关键词的情况)<br>             while(($pos=mb_strpos($str,$value,$pos+1))!==false &amp;&amp; $pos_count                 $pos_arr[]=$pos;<br>                 $pos_count++;<br>             }<br>             // 遍历数组,将对应位置置1<br>             foreach ($pos_arr as $pos_val) {<br>                 if($pos_val!==false){<br>                     $fill=array_fill($pos_val,mb_strlen($value),1);<br>                     $map = array_replace($map,$fill);<br>                 }<br>             }<br>             $pos=null;<br>         }<br><br>         // 遍历map数组,加入高亮代码<br>         $flag=0;<br>         $position=-1;<br>         $result="";  // 结果数组<br>         foreach ($map as $key =&gt; $value) {<br>             if($value==1){<br>                 // 如果第一次出现1,则加上html标签头<br>                 if($flag==0) $result.="<span>";<br>                 $flag=1;<br>             }else{<br>                 // 如果已经到了一个0,但上一个还是1时,加入html标签尾<br>                 if($flag==1){<br>                     $position=$key-1;<br>                     $flag=0;<br>                     $result.="</span>";<br>                 }<br>             }<br>             // 将该位置的字符加入结果字符串中<br>             $result.=mb_substr($str,$key,1);<br>         }<br>         return $result;<br>     }附上一个简单的关键词分离代码;    $query_words=explode(" ",trim($str));<br>     foreach ($query_words as $key =&gt; $value) {<br>         if(!$value) unset($query_words[$key]);<br>     }

AD:真正免费,域名+虚机+企业邮箱=0元

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号