2009-05-16 4 views
2

私は、ユーザーの統計をチェックし、ポイント、ランク、またはnum_friendsであり、SOに使用されているものと同様のバッジを授与するコードを書くようにしています。このシステムは、ユーザがタスク(投票、コメントなど)を完了すると設定され、そのuser_idが記録され、cronジョブによって5分間隔で評価されるようにキューに入れられます。これはこれを行う最も効率的な方法ですか?私はバッジについて他の投稿を見ましたが、これが好ましい方法として選択された方法であるかどうかはわかりません。バッジシステムと条件を変数として保存していますか?

私が持っているもう1つの質問は、実際にこれらの変数(ポイント、ランク、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のを使用するために持っていると思う)が、私は任意の助けをいただければ幸いか、わからないんだけど!

答えて

3

$bq['badge_var']かどうかを確認します現在のスコープ内で有効な変数名である文字列です。これを行うことができます:

$value = ${ $bq['badge_var'] }; 

あなたの代わりにcheckbadges()に配列を渡す場合は拡張し、より安全かつ容易であるかもしれない:

$userdataは、このようなものである
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']); 
     } 
    } 
} 

:あなたが利用可能を拡張することができ

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

関数を変更することなく変数

+0

ありがとう、これは私の最初の可変変数に遭遇した - これは彼多くのlps! – mdolon

0

正しい値を得られない変数の期待値と観測値はどちらですか?

また、その優れた実践に使用する:

$arr['key'] 

の代わりに、PHPなど

$arr[key] 

を最初にそれを評価する悪い習慣がある定数として、PHP Reference: Arrays

関連する問題