有些需求是要根据相似度排序的,比如模糊搜索出来的结果按相似度排序后更准确、某些商品优先按同名排序等等。
用到的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