2010-09-21 77 views
2

我目前正在一個網站上工作(其中包括一個論壇的cms),我想給每個用戶點做特定的任務(++每次),最終應該給他們一個排名。做這個更容易或更好的方法?

E.g.如果用戶做了一個帖子,他們會得到5分,如果用戶提交了一個線程/主題,他們會得到20分,依此類推,如果分數超過M並且低於MX,他們會是R等級等。

M =獲得等級所需的最低點數。

MX =獲得排名所需的最高分數。

R =等級(例如初級,大師等)。

希望一切都清楚了,它有點像傳統的論壇積分系統,你給定的帖子分數 - 這會給他們一個顯示標題/排名。

我目前存放點的MySQL數據庫中,並通過PHP分配等級if語句,像這樣:

if ($points > 0 && < 100) { 
    $rank = 'Beginner'; 
} 

是他們的某種類,庫函數,公式,方法;你可以建議哪些可以使這更容易,或更好的方式,你可以想到?

乾杯!

+0

順便說一下,語言是PHP。 – Newbtophp 2010-09-21 22:35:29

回答

0

似乎它可能更好地存儲在數據庫中的排名,並更新它,每當你更新點值。這樣你就不會在每個頁面視圖上爲每個用戶計算排名。視圖將比更新更頻繁地發生。

我不認爲這就是你問的。只是我的兩分錢。

編輯:第二次看,我發現帖子裏沒有任何內容建議你不是已經在做這件事了。隨意忽略我。

5

您不需要同時存儲最小值和最大值。 (除非你的隊伍的點值是不連續的,我想。)我把你的隊伍在一個陣列,由該等級的最小值索引做到這一點,按相反的順序:

$ranks = array(
    500 => 'Cthuloid', 
    250 => 'Veteran', 
    100 => 'Beginner', 
    50 => 'Noob' 
); 

然後,只需編寫一個短路循環來查找大於或等於用戶評分的第一排:

function getRankOfScore($score) 
{ 
    foreach ($ranks as $value => $name) { 
     if ($score >= $value) { 
      return $name; 
     } 
    } 
    return 'Unranked'; 
}