2009-05-16 3 views
2

나는 사용자 통계를 검사하는 코드 조각을 작성하려고합니다. 포인트, 순위 또는 num_friends가되고 그에 따라 SO에서 사용 된 것과 유사한 배지가 부여됩니다. 이 시스템은 사용자가 작업 (투표 업, 코멘트 등)을 완료 할 때 설정되며 user_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; 
     } 
    } 
} 

)하지만 난 어떤 도움을 주시면 감사하겠습니다 방법, 확실하지 않다 !

답변

3

$bq['badge_var'] 경우 참조 현재 범위에서 유효한 변수 이름 인 문자열입니다.이 작업을 수행 할 수 있습니다.

$value = ${ $bq['badge_var'] }; 
당신이 대신 checkbadges()에 배열을 전달하는 경우 확장 안전하고 쉬울 수 있습니다

:

array('points' => 1 , 'friends' => 10, 'rank' => 10); 

그런 다음 사용할 수를 확장 할 수

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이 같은입니다 함수를 수정하지 않고 변수

+0

감사합니다. 이것은 변수 변수를 처음 접한 순간이었습니다. 많이 lps! – mdolon

0

올바른 값을 얻지 못하는 변수의 예상 값과 관측 값은 어느 것입니까?

또한, 그것의 더 나은 방법은 사용 :

$arr['key'] 

대신 PHP 같은

$arr[key] 

을 먼저 평가합니다 나쁜 관행 인 상수로, PHP Reference: Arrays

관련 문제