按关键词相似度排序,similar_text的使用其实很简单,针对某些特殊的排序可以快速实现

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


用到的php函数是similar_text函数,这个函数有3个参数,similar_text($first,$second,$percent);

$first是需要对比的字符串,$second是输入的字符串(本案例用keyword),$percent就是一个浮点类型的相似度。


实现流程:

微信截图_20211102095211.png

写了一个函数:

<?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'));


结果:

微信截图_20211102093013.png

计算出percent.jpg



2.png

排序后.jpg


3.png


最终返回.jpg


评论/留言