【问题标题】:PHP voting intensity/force?PHP投票强度/力量?
【发布时间】:2011-01-12 02:32:17
【问题描述】:

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

这样$score 不能高于 5(它的值)。

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

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

【问题讨论】:

  • $score = $number_of_voters / $rating ?这是什么意思...你的意思是 $score = $number_of_voters(rating=1)/1 + $number_of_voters(rating=2)/2 etc
  • @Jason 我已经用更多信息编辑了我的初始问题/帖子 - 请查看 :)

标签: php rating drupal-fivestar


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    每个用户都为整体评分贡献了(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 因子。

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

    $numer = 0;
    $denom = 0;
    for($i = 0; $i < count($ratings); $i++){
        $numer = $weights[$i]*$ratings[$i];
        $denom = $weights[$i];
    }
    $avg = $numer / $denom;
    

    【讨论】:

    • 为快速响应干杯马克,但是我对如何集成您的方法有点困惑,您能否详细说明 $ratings$weights 是什么(我了解他们的数组,但不是确定他们持有什么数据),好吗?
    【解决方案3】:

    尝试这样做... 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多