我目前正在开发一个网站(由带有论坛的cms组成),我想给每个用户点做特定任务(每次都是++),这最终会给他们一个等级。 / p>
E.g。如果用户做了一个帖子他们会得到5分,如果用户提交了一个主题/主题,他们会获得20分等等,如果得分超过M且排名低于MX则排名就像MX一样R等等。
M =获得排名所需的最低分数。
MX =获得排名所需的最高分数。
R =排名(例如初级,硕士等)。
希望一切都很清楚,它有点像传统的论坛积分系统,你给出的帖子点数 - 这将给他们一个显示标题/排名。
我目前正在将这些点存储在MySQL数据库中,并通过PHP为if语句分配如下语句:
if ($points > 0 && < 100) {
$rank = 'Beginner';
}
是他们的某种类,库,功能,公式,方法;你可以建议哪些可以让你更容易,或者你能想到更好的方式?
干杯!
答案 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)
似乎最好将排名存储在数据库中,并在更新点值时更新它。这样您就不会在每个页面视图上计算每个用户的排名。视图将比更新更频繁地发生。
我认为这不是你要问的。只是我的两分钱。
编辑:第二眼看,我发现帖子中没有任何内容表明你一开始并没有这样做。随意忽略我。