php数据库根据相似度排序,php数组字段相似度排序
摘要:今天有一个客户有这么一个需求,要求对某篇文章的相关内容的列表,在跟文章标题进行相似度排序,于是想了又想,写了一个小算法,可以根据关键字相似度对数组某个字段进行排序...
今天有一个客户有这么一个需求,要求对某篇文章的相关内容的列表,在跟文章标题进行相似度排序,于是想了又想,写了一个小算法,可以根据关键字相似度对数组某个字段进行排序。
废话少说,直接上代码://原数据
$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数组字段相似度排序相关推荐
- boost::sort模块实现在大多数排序的数组示例上展开排序
boost::sort模块实现在大多数排序的数组示例上展开排序 实现功能 C++实现代码 实现功能 boost::sort模块实现在大多数排序的数组示例上展开排序 C++实现代码 #include & ...
- php 按汉字拼音排序,php 数组按中文拼音排序
本篇文章给大家分享的内容是关于php数组按中文拼音排序,有着一定的参考价值,有需要的朋友可以参考一下 $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢 ...
- php拼音排序,php数组按拼音顺序排序的方法详解
这篇文章主要介绍了php实现数组按拼音顺序排序的方法,涉及php汉字与拼音的转换及数组遍历.排序相关操作技巧,需要的朋友可以参考下 一.问题: 给定数组要求实现按照其汉字首字母排序: $pinyin ...
- mysql韩语排序_MySQL汉字字段按拼音排序
我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order ...
- php 字符串排序 带数组,php – 按字符串排序的多维数组
我正试图弄清楚如何做到这一点,我有这个多维数组: Array ( [0] => Array ( [time] => November 1st 10:10 [query] => mov ...
- java集合数组,数组小到大排序,数组大到小排序
List<?>[] lsa = new List<?>[10]; // OK, array of unbounded wildcard type. Object o = lsa ...
- python【力扣LeetCode算法题库】面试题 10.01-合并排序的数组
面试题 10.01. 合并排序的数组 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B. 编写一个方法,将 B 合并入 A 并排序. 初始化 A 和 B 的元素数量分别为 m ...
- python 合并排序的数组
| 合并排序的数组 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B. 编写一个方法,将 B 合并入 A 并排序. 初始化 A 和 B 的元素数量分别为 m 和 n. 示例: ...
- matlab数组元素的比较大小排序,MATLAB数组元素的排序
MATLAB sort() 函数用来对数组元素进行排序,它有以下几种常见的用法: B = sort(A) %使用默认规则对数组排序 B = sort(A, dim) %dim指定排序的维度 B = ...
最新文章
- VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
- python介绍和用途-python应用领域介绍
- 无法加载指定的元数据资源(转载)
- 如何看待潘石屹搞python_潘石屹考了99分的Python,到底是一种什么存在?
- 国土空间规划的体系和内容
- 【Django】Apache上运行单个Django项目,mod_wsgi配置
- html广告20s倒计时,简单时尚的jQuery倒计时插件
- java 正则表达式 数量
- Net需要掌握的知识
- register_globals
- laravel validate 设置为中文(验证提示为中文)
- cobertura试用
- Asp.net1.0 升级 ASP.NET 2.0 的几个问题总结 (转)
- 复变函数思维导图梳理
- 推荐算法的一些英文缩写总结
- mysql lob 操作_Oracle中LOB 处理
- Linux 下检查 VT-d / IOMMU 是否开启
- 华为手机怎么打开位置服务器,华为手机怎么开启远程定位服务器
- cocos2dx+VS2019环境配置
- 《集体智慧编程》P8-P18
热门文章
- Python 随机森林分类
- java画图板代码_java学习小总结——画图板制做(附代码)
- 吉林大学c语言考试题库,吉林大学C语言题库.docx
- Faster R-CNN论文详解
- Linux驱动编程 step-by-step (二) 简单字符设备驱动
- 中国大数据企业排行榜V6.0- 5 年后再去看看中几个大数据公司的发展状况
- 如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
- 虚拟机克隆Linux操作系统后解决MAC地址冲突
- shell中的$()、${}、$(())、(())
- Unix编程哲学和软件设计方法