首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP投票强度/强度?

PHP投票强度/强度?
EN

Stack Overflow用户
提问于 2011-01-12 10:32:17
回答 3查看 163关注 0票数 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)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-12 10:40:27

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

但是在开始编码之前,您应该阅读How Not To Sort By Average Rating,这样您就可以避免这种投票系统的一些常见陷阱。

票数 2
EN

Stack Overflow用户

发布于 2011-01-12 10:39:22

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

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

然后计算分数为:

代码语言:javascript
复制
sum{ (user i's weight) * (user i's rating) } / sum{ (user i's weight) * 5 }

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

假设您有两个数组,一个是rating(第i个项目对应于第i个用户的评分) $ratings,另一个是weights (第i个项目对应于第i个用户的RPG级别) $weights,您可以这样计算:

代码语言:javascript
复制
$numer = 0;
$denom = 0;
for($i = 0; $i < count($ratings); $i++){
    $numer = $weights[$i]*$ratings[$i];
    $denom = $weights[$i];
}
$avg = $numer / $denom;
票数 1
EN

Stack Overflow用户

发布于 2011-01-12 10:52:54

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

代码语言:javascript
复制
$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

如果您实际上没有存储每个投票的用户以及他们的投票结果,那么这比使用数组更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4664835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档