php提供一维数组模糊查询
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提供一维数组模糊查询的更多相关文章
- PHP 数组模糊查询
function search() { $a=array( '0' => array('id'=>1,'pid'=>0,'name'=>'水果'), '1' => arr ...
- javascript模糊查询一个数组
/* * 模糊查询一个数组 */ com.ty.repairtech.JsonOperation.searchList = function(str, container) { var newList ...
- 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。
'''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...
- 使用mybatis提供的各种标签方法实现动态拼接Sql。这里演示where标签和if标签实现使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录。
1.需求: 使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录. 2.在UserMapper接口中定义方法: public List<User> findU ...
- 利用DetachedCriteria实现模糊查询和分页
分类: Java-Developing 前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...
- 编写简易的JS输入框模糊查询匹配(附有源码和demo)
前言:JS输入框模糊匹配插件以前在工作写过一个类似的 所以这次写轻松很多,这次写优化了几个方面: 1. 添加动态加载css文件 不需要引入css css全部在JS动态生成. 2. 不需要额外的标签 只 ...
- query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max
3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...
- vue实现输入框的模糊查询(节流函数的应用场景)
上一篇讲到了javascript的节流函数和防抖函数,那么我们在实际场合中该如何运用呢? 首先,我们来理解一下:节流函数首先是节流,就是节约流量.内存的损耗,旨在提升性能,在高频率频发的事件中才会用到 ...
- 详解TableStore模糊查询——以订单场景为例
背景 订单系统在各行各业中广泛应用,为消费者.商家后台.促销系统等第三方提供用户.产品.订单等多维度的管理和查询服务.为了挖掘出海量订单数据的潜能,丰富高效的查询必不可少.然而很多时候并不能给出完整准 ...
随机推荐
- python正则表达式(8)--分组、后向引用、前(后)向断言
无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为 ...
- IE 常见bug
1. 双空白边浮动bug 最常见且最容易发现的bug 之一是IE6和更低版本中的双空白边浮动bug.顾名思义,这个Windows bug使任何浮动元素上的空白边加倍 这个bug 很容易修复,将元素的d ...
- log4j2 配置文件解读
1.日志相关介绍 日志接口(slf4j):slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用,比如log4j.l ...
- EJS的个人总结
什么是模板引擎? 用于Web开发的模板引擎是为了使用用户界面与业务数据(内容)分离而产生的,使用模板语法编写的模板代码通常放在具有特的格式的文档中,经过模板引擎编译之后就会生成一个标准的HTML文档. ...
- 面试15--strcmp,strcpy,memmove实现
一. strcmp strcmp是用于比较两个字符串的大小的. int strcmp( const char *string1, const char *string2 ) char *strin ...
- .net core 原生支持grpc
文章转自:https://grpc.io/blog/grpc-on-dotnetcore This is a guest post by Sourabh Shirhatti, a Program Ma ...
- 从Hello World 来讲解线程
从一个经典的例子开始:一个打印“Hello World.”的程序.一个非常简单的在单线程中运行的Hello World程序如下所示,当我们谈到多线程时,它可以作为一个基准. #include<i ...
- nginx之TCP反向代理
实现Nginx tcp负载均衡 Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于DNS的域名解析,其配置方式和指令和http 代理类似 ...
- Navicat配置跳板机连接数据库
需求 在开发中,有时候我们会碰到这么一个情况.数据库的服务器在内网,如果想连接,必须得先ssh登陆到跳板机,然后在跳板机ssh到达数据库所在服务器,进而操作数据库.遗憾的是,如果跳板机和数据库所在服务 ...
- MySQL避免插入重复记录:唯一性约束
mysql在存在主键冲突或者唯一键冲突的情况下,根据插入策略不同,一般有以下三种避免方法.1.insert ignore2.replace into3.insert on duplicate ke ...