我在写一段代码,用于检查的一个用户统计数据,将他们点、级别或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参考:阵列

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top