php实现的搜索多关键字不重复高亮显示实现方式

<?php

$title='苏州园林 荷塘月色 古建筑 古色古香 房屋 走廊 建筑 阁楼 3d模型下载';
//用户搜索关键字
$so='超大城市 房屋 建筑 寺庙 绿地 花草村庄 古建筑 日式风格 3d模型下载';
//对用户的搜索词进行分词返回的结果
$str='[{"t":"超大","p":"0.649353"},{"t":"超大城市","p":"0.981573"},{"t":"大城","p":"0.46208"},{"t":"大城市","p":"0.855926"},{"t":"城市","p":"0.834678"},{"t":"房屋","p":"1"},{"t":"建筑","p":"1"},{"t":"寺庙","p":"1"},{"t":"绿地","p":"1"},{"t":"花草","p":"1"},{"t":"村庄","p":"1"},{"t":"古建","p":"0.282374"},{"t":"古建筑","p":"0.638011"},{"t":"建筑","p":"0.802111"},{"t":"日式","p":"0.639759"},{"t":"日式风格","p":"0.902741"},{"t":"风格","p":"0.82646"},{"t":"3d模型","p":"0.942089"},{"t":"模型","p":"0.74007"},{"t":"下载","p":"1"}]';
$aStr=json_decode($str,true);
$temp1=temp2=$pxlst=[];
foreach ($aStr as $v){
    $temp1[]=strlen($v['t']);
    $temp2[]=$v['t'];
    $pxlst[]=$v['t'];

}
//排序方便加高亮不重复
array_multisort($temp1,SORT_DESC,$pxlst);
$title=preg_replace("/{$so}/i", "<b class='red'>{$so}</b>", $title);
$glkwd=[];
foreach ($pxlst as $v){
    //判断包含当前关键字是否已经高亮,高亮过的则跳过,否则就会出现高亮中嵌套高亮样式
    if(searchIsInArr($glkwd,$v))continue;
    $title=preg_replace("/{$v}/i", "<b class='red'>{$v}</b>", $title);
    $glkwd[]=$v;
}
echo $title;

//查找是否存在于数组内
function searchIsInArr($array,$keyword){
    if(!$array)return false;
    $res=false;
    foreach($array as $key=>$values ){
        if (strstr( $values , $keyword ) !== false ){
            //说明找到了
            $res=true;
            break;
        }
    }
    return $res;
}

image.png

支付宝扫码打赏 微信扫码打赏

如果本文对你有帮助,欢迎打赏本站

喜欢 ()or分享
    匿名评论
  • 评论
人参与,条评论