2

好吧,我正在考虑在我的应用程序中添加一个评分功能,会员可以在 1-5 之间投票(这是$rating),我会显示平均分数,例如$score = $number_of_voters / $rating。在哪里$number_of_voters是对该特定项目投票的成员总数,$rating是该特定项目的总评分。

这样一来,$score它就不能高于 5(它的值)。

但是,我正在考虑根据用户的 RPG 级别(这是一个 1-8 之间的数字,可以逐渐增加 - 每个成员都分配)来整合投票强度/力量,所以例如,如果他们投票并且他们的 RPG 级别是1 平均分数不会与以前的差别太大(不会影响太大)但是如果它是 8 之类的东西,那么它会影响更多吗?(太总结他们的 RPG 水平,投票时会在内部考虑)。

但不确定如何在不影响初始规范的情况下进行(如何集成/实施)(即,我不希望分数高于 5(希望它是 $score <= 5))。

4

3 回答 3

2

为了解决您的直接问题,您可以乘以分数权重 0-1。如果你有不同的级别,你可以通过将用户的级别除以最大级别来得到这个权重。

但是在你开始编码之前,你应该阅读如何不按平均评分排序,这样你就可以避免这种投票系统的一些常见缺陷。

于 2011-01-12T02:40:26.867 回答
1

每个用户对(weight)*(rating)整体评分都有贡献,因此分子是所有用户的总和。

分母是最大可能的分数,对于每个用户,这是(weight)*5. 因此,分母是所有用户的总和。

然后将分数计算为:

sum{ (user i's weight) * (user i's rating) } / sum{ (user i's weight) * 5 }

但是请注意,这会给您一个 0-1 范围内的分数,如果您想要 0-5 范围内的分数,您可以按 5 进行归一化,这会删除分母中的 5 因子。

假设您有两个数组,一个是评级(第i个项目对应于第i个用户的评级)$ratings和一个权重(第i个项目对应于第i个用户的 RPG 级别)$weights,您可以将其计算为:

$numer = 0;
$denom = 0;
for($i = 0; $i < count($ratings); $i++){
    $numer = $weights[$i]*$ratings[$i];
    $denom = $weights[$i];
}
$avg = $numer / $denom;
于 2011-01-12T02:39:21.890 回答
0

尝试做这样的事情...... 1 级用户投票计为 1 票,而 8 级用户投票计为 8 票:

$thisvote = $level * $vote; 
//a user with a level 5, and a vote of 5...this is 25
$total = ($total + $thisvote) / $level + 1;
//if total was 4, 25+4 = 29, 29 / 6 = 4.83

如果您实际上并未存储每个投票的用户以及他们的投票内容,这比使用数组更容易。

于 2011-01-12T02:52:53.943 回答