我正在尝试编写一段代码来检查用户统计信息,无论是他们的积分、排名还是 num_friends,然后再授予他们类似于 SO 中使用的徽章。系统设置为当用户完成任务(投票、评论等)时,他们的 user_id 会被记录并排队等待 cron 作业以 5 分钟的间隔进行评估。这是最有效的方法吗?我看到了另一篇关于徽章的帖子,但不确定这是否是被选为首选方式的方法。
我的另一个问题是关于实际检查用户的这些变量(点数、排名、num_friends)。我有许多徽章,并希望允许管理员在他们选择变量、运算符(==、>= 等)及其设置的值的位置添加自己的徽章。如何在 IF 条件语句中评估它?我尝试将 SWITCH 用于运算符,但无法正确评估变量,例如:
function checkbadges($userid,$points,$rank,$friends){
global $database;
$q = $database->db_query("SELECT * FROM badges");
while($bq = $database->db_fetch_assoc($q)) {
switch($bq[badge_sign]) {
case "1":
if($bq[badge_var] == $bq[badge_value])
givebadge($userid, $bq[badge_id]);
break;
case "2":
if($bq[badge_var] >= $bq[badge_value]))
givebadge($userid, $bq[badge_id]);
break;
case "3":
if($bq[badge_var] <= $bq[badge_value]))
givebadge($userid, $bq[badge_id]);
break;
case "4":
if($bq[badge_var] != $bq[badge_value]))
givebadge($userid, $bq[badge_id]);
break;
}
}
}
我想我必须使用 eval() 但我不确定如何,任何帮助将不胜感激!