문제

나는 사용자 통계를 확인하는 코드를 작성하려고 노력하고 있습니다. 포인트, 순위 또는 NUM_Friendss는 그와 비슷한 배지를 수여합니다. 시스템은 사용자가 작업 (투표, 의견 등)을 완료 할 때 설정되므로 사용자 _id를 기록하고 CRON 작업에 의해 5 분 간격으로 평가되도록 대기합니다. 이것이 가장 효율적인 방법입니까? 배지에 대한 다른 게시물을 보았지만 이것이 선호하는 방법으로 선택된 방법인지 확실하지 않습니다.

내가 가진 또 다른 질문은 실제로 이러한 변수 (포인트, 순위, NUM_Friends)를 사용자에 대해 확인하는 것입니다. 나는 많은 배지가 있고 관리자가 변수, 연산자 (==,> = 등)를 선택한 위치에 자신의 자체를 추가하고 설정 한 값을 추가 할 수 있도록 허용합니다. IF 조건 문서에서이를 어떻게 평가합니까? 연산자에게 스위치를 사용하려고 시도했지만 변수를 올바르게 평가할 수는 없습니다.

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