2011-01-12 29 views
2

好吧,我正在考慮爲我的應用程序添加評分功能,其中會員可以在1-5(這是$rating)之間進行投票,並顯示$score = $number_of_voters/$rating的平均分數。其中$number_of_voters是對該特定項目投票的成員總數,$rating是該特定項目的總評分。PHP投票強度/力量?

這樣$score不能高於5(這是它的缺失)。

然而,我正在考慮根據用戶RPG級別(這是一個1-8之間的數字逐漸增加 - 每個成員已分配)來整合投票強度/力量,因此如果他們投票並且他們的RPG水平是1,平均分不會與以前不同(不會影響它太多),但是如果它是像8那麼它會影響它更多? (過於總結他們的RPG級別將在投票時被內部考慮)。但不知道如何進行(如何整合/實現),而不影響初始規範(即我不希望得分高於5(希望它是$分數< = 5))。

+0

$ score = $ number_of_voters/$ rating?那是什麼意思...你的意思是$ score = $ number_of_voters(rating = 1)/ 1 + $ number_of_voters(rating = 2)/ 2等 – Jason 2011-01-12 02:35:01

+0

@Jason我編輯了我的初始問題/發佈更多信息 - 請看看:) – newbtophp 2011-01-12 02:44:21

回答

2

爲了解決您的眼前問題,你可以通過一個分數權重乘以0-1。如果你有不同的等級,你可以通過用戶等級除以最高等級來得到這個重量。

但是在開始編碼之前,您應該閱讀How Not To Sort By Average Rating,以避免使用這種投票系統的一些常見缺陷。

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。

假如你有兩個數組,收視率(在個項目對應於個用戶的評級)$ratings之一,權重之一(個項目對應於個用戶的RPG級)$weights可以計算這個爲:

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

Cheers Mark對於快速響應,但是我對如何整合你的方法有些困惑,你能詳細說明'$ ratings'和`$ weights`是什麼(我理解他們的數組,但不知道他們擁有哪些數據),請? – newbtophp 2011-01-12 02:53:37

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 

這比使用數組更容易,如果你不實際存儲每個投票的用戶以及他們的投票結果。