2010-09-21 7 views
2

Je travaille actuellement sur un site web (qui se compose de cms avec un forum), et je veux donner à chaque utilisateur des points pour effectuer des tâches spécifiques (++ à chaque fois), ce qui devrait éventuellement lui donner un rang.Une manière plus facile ou mieux de le faire?

E.g. si l'utilisateur faisait un post, il obtiendrait 5 points, si l'utilisateur soumettait un sujet/sujet, il obtiendrait 20 points et ainsi de suite et les rangs seraient comme si les points étaient sur M et plus bas que MX ils seraient le rang R et ainsi de suite.

M = Le nombre minimum de points requis pour gagner le rang. MX = Le maximum de points nécessaires pour gagner le rang.

MX =

R = Le rang (par exemple, débutant, maître, etc.).

Espérons que tout est clair, c'est un peu comme le système de points du forum traditionnel où vos points donnés pour les messages - ce qui leur donnerait un titre/rang d'affichage.

Je stocke actuellement des points dans un DB MySQL, et l'attribution d'un rang par PHP avec si des déclarations comme si:

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

Est-ce une sorte de leur classe, une bibliothèque, la fonction, la formule, la méthode; vous pouvez suggérer qui pourrait rendre cela plus facile, ou une meilleure façon de penser?

À la votre!

+0

La langue est PHP. – Newbtophp

Répondre

0

Il semble qu'il serait peut-être préférable de stocker le rang dans la base de données et de le mettre à jour chaque fois que vous mettez à jour la valeur du point. De cette façon, vous ne calculez pas le classement de chaque utilisateur sur chaque page. Les vues se produiront beaucoup plus fréquemment que les mises à jour.

Je ne pense pas que ce soit ce que vous demandiez. Juste mes deux cents.

EDIT: Sur le second coup d'oeil, je vois qu'il n'y a rien dans le post pour suggérer que vous ne le faisiez pas déjà en premier lieu. N'hésitez pas à m'ignorer.

5

Vous n'avez pas besoin de stocker à la fois le min et le max. (À moins que les valeurs de points pour vos rangs ne sont pas contigus, je suppose.) Je ferais cela en mettant vos rangs dans un tableau, indexé par la valeur min pour ce rang, dans l'ordre inverse:

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

Ensuite, il suffit d'écrire une boucle de court-circuit pour trouver le premier rang supérieur ou égal au score de l'utilisateur:

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