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

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不限制 * @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。

    一维或二维数组|一维或二维数组 根据关键字 对 数组字段 进行相似度排序
    文章图片
3.2、二维数组
public function test() { $arr = [ ['a'=>'你好'], ['a'=>'你在干嘛'], ['a'=>'你好吗'], ['a'=>'你好好'], ['a'=>'你在吗'], ['a'=>'你你你'], ]; $arr1 = similarArrSort($arr,'你好','a'); ddd($arr1); }

  • 【一维或二维数组|一维或二维数组 根据关键字 对 数组字段 进行相似度排序】返回的效果图如下,关键词是你好,对应比较字段是a。

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

    推荐阅读