有些需求是要根据相似度排序的,比如模糊搜索出来的结果按相似度排序后更准确、某些商品优先按同名排序等等。
用到的php函数是similar_text函数,这个函数有3个参数,similar_text($first,$second,$percent);
$first是需要对比的字符串,$second是输入的字符串(本案例用keyword),$percent就是一个浮点类型的相似度。
实现流程:

写了一个函数:
<?php
/**
* 按相似度返回
* @param $arr
* @param $keyword
* @param string $column
* @return mixed
* @author blog.alipay168.cn
*/
function similar_sort($arr, $keyword, $column = 'title')
{
//计算一下相似度,可以用foreach代替array_walk
array_walk($arr, function (&$value, $k, $arg) {
similar_text($value[$arg['column']], $arg['keyword'], $percent);
$value['percent'] = $percent;
}, ['keyword' => $keyword, 'column' => $column]);
//打印有percent结果的数组
//print_r($arr);
//根据相似度排序
$nums = array_column($arr, 'percent');
array_multisort($nums, SORT_DESC, $arr);
//移除相似度字段
foreach ($arr as &$value) {
unset($value['percent']);
}
unset($value);
return $arr;
}
//测试
$arr = [
['id' => 1, 'title' => '小v测试平台'],
['id' => 2, 'title' => '我是小V哈'],
['id' => 3, 'title' => '免费领取商城'],
['id' => 4, 'title' => '小v教程'],
['id' => 5, 'title' => '爱上小v平台'],
['id' => 6, 'title' => '周末去哪里玩'],
['id' => 6, 'title' => '小v'],
];
print_r(similar_sort($arr, '小v'));结果:

计算出percent.jpg

排序后.jpg

最终返回.jpg