我正在尝试编写一段代码来检查用户的统计数据,无论是他们的积分,排名还是num_friends,然后奖励他们一个类似于SO中使用的徽章 . 系统被设置为当用户完成任务(投票,评论等)时,他们的user_id被记录并排队以由cron作业以5分钟的间隔进行评估 . 这是最有效的方法吗?我看到关于徽章的另一篇文章,但我不确定这是否是被选为首选方法的方法 .
我的另一个问题是实际上是针对用户检查这些变量(points,rank,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(),但我不确定如何,任何帮助将不胜感激!
2 回答
如果
$bq['badge_var']
是一个字符串,它是当前作用域中的有效变量名,则可以这样做:如果将数组传递给
checkbadges()
,则可能更安全,更容易扩展:其中
$userdata
是这样的:然后,您可以在不修改函数的情况下扩展可用变量
您没有获得正确值的变量的预期值和观察值是多少?
此外,它使用的更好的做法:
代替
因为PHP会首先将它作为常量进行评估,这是一种不好的做法,请参阅PHP Reference: Arrays