这样做更容易或更好吗?

时间:2010-09-21 22:30:40

标签: php

我目前正在开发一个网站(由带有论坛的cms组成),我想给每个用户点做特定任务(每次都是++),这最终会给他们一个等级。 / p>

E.g。如果用户做了一个帖子他们会得到5分,如果用户提交了一个主题/主题,他们会获得20分等等,如果得分超过M且排名低于MX则排名就像MX一样R等等。

M =获得排名所需的最低分数。

MX =获得排名所需的最高分数。

R =排名(例如初级,硕士等)。

希望一切都很清楚,它有点像传统的论坛积分系统,你给出的帖子点数 - 这将给他们一个显示标题/排名。

我目前正在将这些点存储在MySQL数据库中,并通过PHP为if语句分配如下语句:

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

是他们的某种类,库,功能,公式,方法;你可以建议哪些可以让你更容易,或者你能想到更好的方式?

干杯!

2 个答案:

答案 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';
}

答案 1 :(得分:0)

似乎最好将排名存储在数据库中,并在更新点值时更新它。这样您就不会在每个页面视图上计算每个用户的排名。视图将比更新更频繁地发生。

我认为这不是你要问的。只是我的两分钱。

编辑:第二眼看,我发现帖子中没有任何内容表明你一开始并没有这样做。随意忽略我。