【问题标题】:A easier or better way of doing this?一个更简单或更好的方法?
【发布时间】:2010-09-21 22:30:39
【问题描述】:

我目前在一个网站上工作(由带有论坛的 cms 组成),我想给每个用户点以完成特定任务(每次都++),这最终应该会给他们一个排名。

例如如果用户发表了一篇文章,他们将获得 5 分,如果用户提交了一个主题/主题,他们将获得 20 分,依此类推,如果分数超过 M 并且低于 MX,他们将是R等级等等。

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

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

R = 等级(例如初学者、大师等)。

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

我目前将积分存储在 MySQL 数据库中,并通过 PHP 使用 if 语句分配排名,如下所示:

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

它们是某种类、库、函数、公式、方法;您可以建议哪种方法可以使这更容易,或者您能想到更好的方法吗?

干杯!

【问题讨论】:

    标签: php


    【解决方案1】:

    您不需要同时存储最小值和最大值。 (除非您的等级的点值是不连续的,我想。)我会通过将您的等级放入一个数组中来做到这一点,该数组由该等级的最小值索引,以相反的顺序:

    $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';
    }
    

    【讨论】:

      【解决方案2】:

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

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

      编辑:再看一遍,我发现帖子中没有任何内容表明您一开始还没有这样做。请随意忽略我。

      【讨论】:

        猜你喜欢
        • 2013-09-10
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-19
        • 2011-11-29
        • 2011-08-25
        • 1970-01-01
        相关资源
        最近更新 更多