美文网首页
一维或二维数组 根据关键字 对 数组字段 进行相似度排序

一维或二维数组 根据关键字 对 数组字段 进行相似度排序

作者: 华仔233 | 来源:发表于2021-01-07 16:13 被阅读0次

    1、思想实现

    • 其中主要运用PHP的方法 similar_text($field,$keyword,$percent),其中$field是对应的值,$keyword是对比的值,$percent是相似度值(0~1)
    • 一维二维数组对比完之后根据相似度的值进行排序,然后去除该字段返回。

    2、代码实现

    /**
     * 一维/二维数组根据关键字对数组字段进行相似度排序
     * @param array $array 原数组
     * @param string $keyword 关键字
     * @param string $field 要匹配的数组字段名,不传则表示一维数组
     * @param int $limit 限制次数,-1不限制
     * @return  array    排序好的数组
     */
    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 = [];
            foreach ($data as $k => $v) $newData[$k] = $v[$newField];
            $data = $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。


    3.2、二维数组
    public function test()
    {
        $arr = [
            ['a'=>'你好'],
            ['a'=>'你在干嘛'],
            ['a'=>'你好吗'],
            ['a'=>'你好好'],
            ['a'=>'你在吗'],
            ['a'=>'你你你'],
        ];
        $arr1 = similarArrSort($arr,'你好','a');
        ddd($arr1);
    }
    
    • 返回的效果图如下,关键词是你好,对应比较字段是a。


    相关文章

      网友评论

          本文标题:一维或二维数组 根据关键字 对 数组字段 进行相似度排序

          本文链接:https://www.haomeiwen.com/subject/nvpzoktx.html