2019年9月30日14:36:15

提供一维数组模糊查询,只支持utf-8 内部处理是Unicode 编码特殊编码格式的可能会出错


if (!function_exists('arrayFuzzyQuery')) {

    /*
* 提供一维数组value 模糊查询,只支持utf-8 内部处理是Unicode 编码特殊编码格式的可能会出错
* 注意:此方法可能会出现处理时间过长的问题
*/ function arrayFuzzyQuery($string, array $array = [], $key = null) { if (empty($string)) {
throw new \Exception('查询参数不能为空');
}
if (empty($array)) {
throw new \Exception('被查询数组为空');
}
$return = []; //期望相似度比例 100为 100%
$expectedRatio = 50; //同时使用全对比和相似度对比
foreach ($array as $k => $v) { if (empty($key)) {
similar_text($string, $v, $percent);
if (mb_substr_count($string, $v) > 0 || $percent >= $expectedRatio) {
array_push($return, $v);
}
} else {
similar_text($string, $v[$key], $percent);
if (mb_substr_count($string, $v[$key]) > 0 || $percent >= $expectedRatio) {
array_push($return, $v);
}
}
}
return $return;
} }

 

注意: similar_text对英文支持效果好一点,中文对比效果差一点,根据实际业务需要 50%这个比例需要调整,经过几轮测试,效果还可以,基本够用,不嫌麻烦就添加到mysql数据库使用like OR elasticsearch

测试数据

  $string = '水果西瓜';

        $arrays = array(
'0' => array('id' => 1, 'pid' => 0, 'name' => '水果'),
'1' => array('id' => 2, 'pid' => 0, 'name' => '蔬菜'),
'2' => array('id' => 3, 'pid' => 1, 'name' => '食品'),
'3' => array('id' => 4, 'pid' => 2, 'name' => '运动'),
'4' => array('id' => 5, 'pid' => 1, 'name' => '电脑'),
'5' => array('id' => 6, 'pid' => '香果', 'name' => '香蕉'),
'6' => array('id' => 7, 'pid' => 4, 'name' => '牛奶'),
'7' => array('id' => 8, 'pid' => 5, 'name' => '西瓜'),
'8' => array('id' => 9, 'pid' => 7, 'name' => '苹果'),
);
// $rr = CommonService::getWarehouse($string, $arrays);
$rr = arrayFuzzyQuery($string, $arrays, 'name');
pp($rr);

php提供一维数组模糊查询的更多相关文章

  1. PHP 数组模糊查询

    function search() { $a=array( '0' => array('id'=>1,'pid'=>0,'name'=>'水果'), '1' => arr ...

  2. javascript模糊查询一个数组

    /* * 模糊查询一个数组 */ com.ty.repairtech.JsonOperation.searchList = function(str, container) { var newList ...

  3. 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。

    '''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...

  4. 使用mybatis提供的各种标签方法实现动态拼接Sql。这里演示where标签和if标签实现使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录。

    1.需求: 使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录. 2.在UserMapper接口中定义方法: public List<User> findU ...

  5. 利用DetachedCriteria实现模糊查询和分页

      分类: Java-Developing  前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...

  6. 编写简易的JS输入框模糊查询匹配(附有源码和demo)

    前言:JS输入框模糊匹配插件以前在工作写过一个类似的 所以这次写轻松很多,这次写优化了几个方面: 1. 添加动态加载css文件 不需要引入css css全部在JS动态生成. 2. 不需要额外的标签 只 ...

  7. query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max

    3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...

  8. vue实现输入框的模糊查询(节流函数的应用场景)

    上一篇讲到了javascript的节流函数和防抖函数,那么我们在实际场合中该如何运用呢? 首先,我们来理解一下:节流函数首先是节流,就是节约流量.内存的损耗,旨在提升性能,在高频率频发的事件中才会用到 ...

  9. 详解TableStore模糊查询——以订单场景为例

    背景 订单系统在各行各业中广泛应用,为消费者.商家后台.促销系统等第三方提供用户.产品.订单等多维度的管理和查询服务.为了挖掘出海量订单数据的潜能,丰富高效的查询必不可少.然而很多时候并不能给出完整准 ...

随机推荐

  1. Worldview in Context

    Worldview in Context Figures 1 and 2 provide a basis for a deeper understanding of worldview. The se ...

  2. Windows10 Docker镜像加速

    https://dockerhub.azk8s.cn #Azure 中国镜像 https://reg-mirror.qiniu.com #七牛云加速器 https://registry.docker- ...

  3. jdk和Tomcat版本之间的关系,jdk尽量要比tomcat低才行

    注:本文来源于:6860 <jdk和Tomcat版本之间的关系,jdk尽量要比tomcat低才行> 用的tomcat是低版本的,但是用的jdk却是高版本的,用Servlet做的项目运行都没 ...

  4. 洛谷 P1079 Vigen&#232;re 密码

    目录 题目 思路 \(Code\) 题目 P1079 Vigenère 密码 思路 字符串+模拟.仔细读题,然后仔细敲代码(说了和没说一样)... \(Code\) #include<iostr ...

  5. 新手AS常见问题集锦

    开发环境 以前开发android的时候可以使用eclipse,虽然现在也能使用eclipse,但是google已经不再支持使用eclipse开发android了.因为google有了自己的IDE--- ...

  6. ES6 fetch方法封装

    // 请求路径 let url = 'http://jsonplaceholder.typicode.com/users' // 传输数据参数 const dataName = { name: &qu ...

  7. Windows 文件过滤驱动经验总结

    Windows 文件过滤驱动经验总结作者:sinister 本文转载自驱动开发网 看了 ChuKuangRen 的第二版<文件过滤驱动开发教程>后,颇有感触.我想,交流都是建立在平等的基础 ...

  8. 【Beta】Scrum Meeting 8

    前言 Beta阶段第8次会议在5月13日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 修复修改密码问题#54 添加主页公告栏 #57实现 ...

  9. windows获取管理员权限 操作文件

    1.文件右键属性 2.安全tab 一路 “应用”和“确定”

  10. 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)

    解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...