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数组字段相似度排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么查看自己的基金是赚了还是赔了呀
- 下一篇: 信用卡逾期能贷款吗