一维或二维数组|一维或二维数组 根据关键字 对 数组字段 进行相似度排序
1、思想实现
- 其中主要运用PHP的方法
similar_text($field,$keyword,$percent)
,其中$field
是对应的值,$keyword
是对比的值,$percent
是相似度值(0~1) - 一维二维数组对比完之后根据相似度的值进行排序,然后去除该字段返回。
/**
* 一维/二维数组根据关键字对数组字段进行相似度排序
* @param array $array 原数组
* @param string $keyword 关键字
* @param string $field 要匹配的数组字段名,不传则表示一维数组
* @param int $limit 限制次数,-1不限制
* @returnarray排序好的数组
*/
function similarArrSort(array $array, string $keyword, $field = '', $limit = -1)
{
//数组key小于2,直接返回,不符合排序要求(特例,可不写)
if (count($array) <= 1 || ($limit != -1 && $limit <= 1)) {
return $array;
}$newField = $field;
//赋值//如果传入的field为空则表示一维数组,生成field为label的二维数组
if ($field == '') {
$label2 = [];
foreach ($array as $k => $value) $label2[$k]['label'] = $value;
$array = $label2;
$newField = 'label';
}//数组相似度处理
foreach ($array as $key => $value) {
similar_text($value[$newField], $keyword, $percent);
$value['percent'] = $percent;
$data[] = $value;
}//取出数组中percent的一列,返回一维数组
$percent = array_column($data, 'percent');
//排序,根据 percent 排序
array_multisort($percent, SORT_DESC, $data);
//一维数组处理返回一维数组
if ($field == '') {
$newData = https://www.it610.com/article/[];
foreach ($data as $k => $v) $newData[$k] = $v[$newField];
$data = https://www.it610.com/article/$newData;
}//限制返回数量
if ($limit != -1) {
$data = array_slice($data, 0, $limit);
}return $data;
}
3、测试代码 3.1、一维数组
public function test()
{
$arr = [2,3,15,23,44,25,66,231,566,246,255,656];
$arr1 = similarArrSort($arr,55);
ddd($arr1);
}
- 返回的效果图如下,关键词是55。
文章图片
public function test()
{
$arr = [
['a'=>'你好'],
['a'=>'你在干嘛'],
['a'=>'你好吗'],
['a'=>'你好好'],
['a'=>'你在吗'],
['a'=>'你你你'],
];
$arr1 = similarArrSort($arr,'你好','a');
ddd($arr1);
}
- 【一维或二维数组|一维或二维数组 根据关键字 对 数组字段 进行相似度排序】返回的效果图如下,关键词是你好,对应比较字段是a。
文章图片
推荐阅读
- 低头思故乡——只是因为睡不着
- 分享!如何分分钟实现微信扫二维码调用外部浏览器打开指定页面的功能
- 拒绝可以很艺术,或者很行为艺术。
- 20180531去二维火学习完给股东的分享
- How|How Fear Works(PartⅡ)
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- 武功山金顶草甸或将易主(投资几千万开发,萍乡(有人想摘桃子))
- 狗趣
- 两个心得