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模糊查询——以订单场景为例
背景 订单系统在各行各业中广泛应用,为消费者.商家后台.促销系统等第三方提供用户.产品.订单等多维度的管理和查询服务.为了挖掘出海量订单数据的潜能,丰富高效的查询必不可少.然而很多时候并不能给出完整准 ...
随机推荐
- rsa 解密过程
直接扣js代码 $w = {}; if (typeof $w.RSAUtils === 'undefined') var RSAUtils = $w.RSAUtils = {}; var biRadi ...
- Git推送文件时,出现的Couldn't load this key(OpenSSH SSH-2 private key (old PEM format))
在进行推送到远程仓库的过程中遇到的一个错误. 解决方法: 找到这个位置 然后打开文件所在位置 再打开这个文件然后再 导入成功 然后点击save private key这个按钮 就可以成功的生成一个文件 ...
- 20180523模拟赛T2——前缀!
简化版题面 jyt毒瘤,写了超长的题面,要看完整题面的翻到最后-- 定义\(f_0(x) = A_x\),\(f_n(x) = \sum^x_{i = 1} f_{n-1}(i)\).给出长度为\(N ...
- Python - 100天从新手到大师
简单的说,Python是一个“优雅”.“明确”.“简单”的编程语言. 学习曲线低,非专业人士也能上手 开源系统,拥有强大的生态圈 解释型语言,完美的平台可移植性 支持面向对象和函数式编程 能够通过调用 ...
- v-for给img的src动态赋值问题
做一个轮播图,给img赋值src <el-carousel-item v-for="(item, index) in carouselImgs" :key="ind ...
- 异步模型:上下文与时间---async = request + reponse + handler + context + time;
futureHandler = current(handler, context(t0)) : T0 -> handler(context(t0),taskResult) : Tx ...
- winform窗体的常用属性
- 云上的三台主机构建server-proxy-agent取不到数据
4252:20191126:172327.217 cannot send list of active checks to "xxx.190.39.152": host [ppp] ...
- cf 1179 C
目录 A B C A 模拟出A不是最大值的情况,存起来. 最多有n个.当A为最大值的时候,后面n-1个数开始循环. 查询分两种情况讨论就行了 #include <bits/stdc++.h> ...
- bzoj3073: [Pa2011]Journeys 线段树优化建图
bzoj3073: [Pa2011]Journeys 链接 BZOJ 思路 区间和区间连边.如何线段树优化建图. 和单点连区间类似的,我们新建一个点,区间->新点->区间. 又转化成了单点 ...