我有 3 个数组,每个数组都包含一个动态生成的文档列表。(列表根据用户搜索的内容而变化)
$list1['documentname']
$list2['documentname']
$list3['documentname']
该数组是多维的,并包含其他信息,例如描述。
因此,如果我想输出第六个文档的名称和描述,我会写:
echo $list1[5]['documentname'].$newline.$list1[5]['description'];
一个特定的文档可能包含在所有三个列表中,也可能一个列表都不包含。我要做的是使用以下公式按文档总分对文档进行排名:
$document_Score = (1/(60+rank_list1)) + (1/(60+rank_list2)) + (1/(60+rank_list3))
我正在想办法做到这一点,但我无处可去。
如果“文档 a ”在list1中排名第 1 ,在list2中排名第 2 ,在list3中排名第 4 ,我如何应用以下公式并将分数相加。
$document_Score = (1/(60+1)) + (1/(60+2)) + (1/(60+4)) //score for "**document a**"
我知道我需要根据是否$list1['documentname'] is equal to $list2['documentname']
等应用代码,但我不知道如何实现这一点。
编辑:
以下代码是我尝试过的。它为list1中的文档提供正确分数,如果 documentname[$i] 值相同,则为list2中的文档评分。
但是这种方法看起来很啰嗦,只能解决一半的问题。似乎我必须在循环内有许多循环来解决这个问题,这不是很有效
for ($i=0;$i<count($list1);$i++)
{
$newline="<br />";
$list1_rank[$i] = $i+1;
$list2_rank[$i]= $i+1;
$list3_rank[$i]= $i+1;
$1ist1_score[$i]= (1/(60+$list1_rank[$i]));
if ($list1[$i]['documentname']== $list2[$i]['documentname'])
{
$list_1_and_2score[$i]=$list1_score[$i]+ (1/(60+$list2_rank[$i]));
}
if ($list1[$i]['documentname']!= $list2[$i]['documentname'])
{
$list2_score[$i]=(1/(60+$list2_rank[$i]));
}
//Outputting the scores calculated:
echo $newline."List 1 Document Name: ".$list1[$i]['documentname'].$newline."List 2 Document Name: ".$list2[$i]['documentname'].$newline."List 1 Score: $list1_score[$i]".$newline."List 2 Score: $list2_score[$i]".$newline."Combined Score: $list_1_and_2score[$i]".$newline;
}
另一个问题是 for 循环中的条件$i<count($list1)
,假设 $list1 是最长的数组,如果 $list3 更长怎么办?我只是说 $i<count($list1) && $i<count($list2) && $i<count($list2)
吗?
欢迎任何建议,我将不胜感激。
多谢你们。