• php搜索关键字,可以多个


    在数据库里有某个字段,想要通过多个关键字来查找出来,方法有很多种,但是我觉得这种挺好用的,如果你也这么认为,不妨试一试

    最终效果

        

    文具/办公室>文具/学校用品>刀/剪刀>剪刀/安全剪刀>粉红色剪刀
    厨房用具>刀/剪刀/菜板>刀套装

    贴代码:

    public function search_category_name($name)
    {
    //$name 传入的关键字,可以多个
    $key = str_replace([',', ',', "'", '/', '-', '<', '>', '》', '’'], ' ', trim($name));
    $key = preg_replace('/s+/', ' ', $key);


    $arr = array_unique( explode(' ', strtolower($key)) );

    //这里的话是想要查询的字段,可以多个,但是需要稍微修改一下下面的代码(假设看的懂的话),我这里只对一个字段操作
    $fields = array('name_path_zh');
    $weight = array(5, 2);

    //开始算法
    $clause = $keyweight = [];
    foreach($arr as $kw){
    foreach($fields as $i=>$fd){
    $clause[] = " `{$fd}` LIKE '%{$kw}%' ";
    $keyweight[] = sprintf(" IF(LOCATE('%s', `%s`), %d, 0) ", $kw, $fd, $weight[$i]);
    $keyweight[] = sprintf(" IF(`%s` REGEXP '[[:<:]]%s[[:>:]]', %d, 0) ", $fd, $kw, $weight[$i] * 5);
    if($i == 0)
    {
    $keyweight[] = sprintf(" IF(STRCMP(LOWER(`%s`), LOWER('%s')), 0, %d) ", $fd, $kw, $weight[$i] * 10);
    }
    }
    }
    //要显示的字段
    $field = sprintf('category_id,name_path_zh as name_path,(%s) AS score', implode('+', $keyweight));
    //查询的条件
    $where = sprintf('(%s) AND is_delete=0 AND is_last=1', implode('OR', $clause));

    //这个是CI封装的模型方法 对应的参数是:条件,字段,排序,表名,limit
    $result = $this->coupang_category_model->getAll($where,$field,'score DESC','',15);
    //给对应的关键字添加<i>标签
    foreach($result as &$val){
    $val['id_css'] = $val['name_path'];
    foreach($arr as $kw){
    if(strtolower($kw) == 'i') continue;
    $val['id_css'] = str_ireplace($kw, sprintf('<i>%s</i>', $kw), $val['id_css']);
    }
    unset($val['score']);
    }
    return $result;
    }


    我输入的是“剪刀”最后的结果是

     那么问题来了<i>标签有什么用呢,可以让前端通过这个标签标红,这样效果就达到啦,如一开始的图。

     
  • 相关阅读:
    JS定义一个立即执行的可重用函数
    Git常用命令速记与入门
    设计的一些kubernetes面试题
    运维知识各种链接
    php7.2安装smbclient扩展
    logrotate自定义切割时间的一些坑
    【转】日志收集工具scribe
    ELK日志报警插件ElastAlert并配置钉钉报警
    consul-server集群搭建
    加油,骚年
  • 原文地址:https://www.cnblogs.com/zhyphp/p/13613625.html
Copyright © 2020-2023  润新知