摘要:今天有一个客户有这么一个需求,要求对某篇文章的相关内容的列表,在跟文章标题进行相似度排序,于是想了又想,写了一个小算法,可以根据关键字相似度对数组某个字段进行排序...

今天有一个客户有这么一个需求,要求对某篇文章的相关内容的列表,在跟文章标题进行相似度排序,于是想了又想,写了一个小算法,可以根据关键字相似度对数组某个字段进行排序。

废话少说,直接上代码://原数据

$data = [

[

'id'=>1,

'title'=>'YzmCMS内容管理系统',

],

[

'id'=>2,

'title'=>'开源CMS',

],

[

'id'=>3,

'title'=>'YzmCMS轻量级开源内容管理系统',

],

[

'id'=>4,

'title'=>'内容管理系统',

],

[

'id'=>5,

'title'=>'免费内容管理系统',

],

[

'id'=>6,

'title'=>'YzmCMS开源CMS',

],

[

'id'=>7,

'title'=>'免费CMS',

],

[

'id'=>8,

'title'=>'轻量级开源CMS',

],

[

'id'=>9,

'title'=>'YzmCMS建站CMS',

],

[

'id'=>10,

'title'=>'免费开源CMS',

],

];

处理方法:/**

* 根据关键字对数组字段进行相似度排序

* @param   $array   原数组

* @param   $keyword 关键字

* @param   $arr_key 要匹配的数组字段名

* @return  array    排序好的数组

*/

function similar_arr($array, $keyword, $arr_key = 'title'){

//数组key小于3,直接返回,不符合排序要求(特例,可不写)

if(count($array)<= 3){

return $array;

}

//数组相似度处理

foreach ($array as $key => $value) {

similar_text($value[$arr_key], $keyword, $percent);

$value['percent'] = $percent;

$data[] = $value;

}

//取出数组中percent的一列,返回一维数组

$percent =  array_column($data, 'percent');

//排序,根据 percent 排序

array_multisort($percent, SORT_DESC, $data);

return $data;

}

使用方法:$res = similar_arr($data, 'YzmCMS');

var_dump($res);

运行结果:array(10) {

[0]=>

array(3) {

["id"]=>

int(6)

["title"]=>

string(15) "YzmCMS开源CMS"

["percent"]=>

float(57.142857142857)

}

[1]=>

array(3) {

["id"]=>

int(9)

["title"]=>

string(15) "YzmCMS建站CMS"

["percent"]=>

float(57.142857142857)

}

[2]=>

array(3) {

["id"]=>

int(1)

["title"]=>

string(24) "YzmCMS内容管理系统"

["percent"]=>

float(40)

}

[3]=>

array(3) {

["id"]=>

int(2)

["title"]=>

string(9) "开源CMS"

["percent"]=>

float(40)

}

[4]=>

array(3) {

["id"]=>

int(7)

["title"]=>

string(9) "免费CMS"

["percent"]=>

float(40)

}

[5]=>

array(3) {

["id"]=>

int(10)

["title"]=>

string(15) "免费开源CMS"

["percent"]=>

float(28.571428571429)

}

[6]=>

array(3) {

["id"]=>

int(3)

["title"]=>

string(39) "YzmCMS轻量级开源内容管理系统"

["percent"]=>

float(26.666666666667)

}

[7]=>

array(3) {

["id"]=>

int(8)

["title"]=>

string(18) "轻量级开源CMS"

["percent"]=>

float(25)

}

[8]=>

array(3) {

["id"]=>

int(4)

["title"]=>

string(18) "内容管理系统"

["percent"]=>

float(0)

}

[9]=>

array(3) {

["id"]=>

int(5)

["title"]=>

string(24) "免费内容管理系统"

["percent"]=>

float(0)

}

}

php数据库根据相似度排序,php数组字段相似度排序相关推荐

  1. boost::sort模块实现在大多数排序的数组示例上展开排序

    boost::sort模块实现在大多数排序的数组示例上展开排序 实现功能 C++实现代码 实现功能 boost::sort模块实现在大多数排序的数组示例上展开排序 C++实现代码 #include & ...

  2. php 按汉字拼音排序,php 数组按中文拼音排序

    本篇文章给大家分享的内容是关于php数组按中文拼音排序,有着一定的参考价值,有需要的朋友可以参考一下 $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢 ...

  3. php拼音排序,php数组按拼音顺序排序的方法详解

    这篇文章主要介绍了php实现数组按拼音顺序排序的方法,涉及php汉字与拼音的转换及数组遍历.排序相关操作技巧,需要的朋友可以参考下 一.问题: 给定数组要求实现按照其汉字首字母排序: $pinyin ...

  4. mysql韩语排序_MySQL汉字字段按拼音排序

    我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order ...

  5. php 字符串排序 带数组,php – 按字符串排序的多维数组

    我正试图弄清楚如何做到这一点,我有这个多维数组: Array ( [0] => Array ( [time] => November 1st 10:10 [query] => mov ...

  6. java集合数组,数组小到大排序,数组大到小排序

    List<?>[] lsa = new List<?>[10]; // OK, array of unbounded wildcard type. Object o = lsa ...

  7. python【力扣LeetCode算法题库】面试题 10.01-合并排序的数组

    面试题 10.01. 合并排序的数组 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B. 编写一个方法,将 B 合并入 A 并排序. 初始化 A 和 B 的元素数量分别为 m ...

  8. python 合并排序的数组

    | 合并排序的数组 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B. 编写一个方法,将 B 合并入 A 并排序. 初始化 A 和 B 的元素数量分别为 m 和 n. 示例: ...

  9. matlab数组元素的比较大小排序,MATLAB数组元素的排序

    MATLAB sort() 函数用来对数组元素进行排序,它有以下几种常见的用法: B = sort(A)  %使用默认规则对数组排序 B = sort(A, dim)  %dim指定排序的维度 B = ...

最新文章

  1. VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
  2. python介绍和用途-python应用领域介绍
  3. 无法加载指定的元数据资源(转载)
  4. 如何看待潘石屹搞python_潘石屹考了99分的Python,到底是一种什么存在?
  5. 国土空间规划的体系和内容
  6. 【Django】Apache上运行单个Django项目,mod_wsgi配置
  7. html广告20s倒计时,简单时尚的jQuery倒计时插件
  8. java 正则表达式 数量
  9. Net需要掌握的知识
  10. register_globals
  11. laravel validate 设置为中文(验证提示为中文)
  12. cobertura试用
  13. Asp.net1.0 升级 ASP.NET 2.0 的几个问题总结 (转)
  14. 复变函数思维导图梳理
  15. 推荐算法的一些英文缩写总结
  16. mysql lob 操作_Oracle中LOB 处理
  17. Linux 下检查 VT-d / IOMMU 是否开启
  18. 华为手机怎么打开位置服务器,华为手机怎么开启远程定位服务器
  19. cocos2dx+VS2019环境配置
  20. 《集体智慧编程》P8-P18

热门文章

  1. Python 随机森林分类
  2. java画图板代码_java学习小总结——画图板制做(附代码)
  3. 吉林大学c语言考试题库,吉林大学C语言题库.docx
  4. Faster R-CNN论文详解
  5. Linux驱动编程 step-by-step (二) 简单字符设备驱动
  6. 中国大数据企业排行榜V6.0- 5 年后再去看看中几个大数据公司的发展状况
  7. 如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
  8. 虚拟机克隆Linux操作系统后解决MAC地址冲突
  9. shell中的$()、${}、$(())、(())
  10. Unix编程哲学和软件设计方法