徽章的系统和储存条件作为变数?
-
22-08-2019 - |
题
我在写一段代码,用于检查的一个用户统计数据,将他们点、级别或num_friends和转奖他们徽章相似,使用如此。该系统被设定任务时(投票,注释,等等。) 是完成通过一个用户,他们的user_id记录和排队将评估在5分钟的时间间隔一定时的工作。这是最有效的方式这样做?我看到了其后有关的徽章,但我不肯定如果这是方法,该方法被选定作为首选的方式。
另一个问题我已经是关于实际检查这些变量(分,排名,num_friends)对用户。我有一个号码的徽章,并要允许管理员加他们自己的,他们选择一个变量,操作员(==,>=,等等。) 和价值的设置。我如何评估,在一个如果有条件的声明?我试图使用交换机的运营商,但不能让的变量进行评估是否正确,如:
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()但是我不知道该如何,任何帮助,将不胜感激!
解决方案
如果$bq['badge_var']
是一个字符串,它是在当前范围内有效的变量名,你可以这样做:
$value = ${ $bq['badge_var'] };
这可能是更安全和更容易,如果你传递数组代替到checkbadges()
延伸:
function checkbadges($userid,$userdata){
global $database;
$q = $database->db_query("SELECT * FROM badges");
while($bq = $database->db_fetch_assoc($q)) {
$currentValue = $userdata[ $db['badge_var'] ];
$requiredValue = $db['badge_value'];
$issueBadge = false;
switch($bq['badge_sign']) {
case "1":
$issueBadge = ( $currentValue == $requiredValue );
break;
case "2":
$issueBadge = ( $currentValue >= $requiredValue );
break;
case "3":
$issueBadge = ( $currentValue <= $requiredValue );
break;
case "4":
$issueBadge = ( $currentValue != $requiredValue );
break;
}
if ($issueBadge) {
givebadge($userid, $bq['badge_id']);
}
}
}
其中$userdata
是这样的:
array( 'points' => 1 , 'friends' => 10, 'rank' => 10 );
可以然后扩展可用的变量,而无需修改功能
其他提示
这是预期的价值和所观察到的价值的变量,你是不是在获取正确价值?
此外,更好的做法的使用:
$arr['key']
而不是的
$arr[key]
作为PHP将评估它第一次作为一个恒定这是不好的实践,请参阅 PHP参考:阵列
不隶属于 StackOverflow