سؤال

وأنا أحاول أن أكتب قطعة من التعليمات البرمجية التي يتحقق من مستخدمي احصائيات، يكون ذلك من النقاط، رتبة أو NUM_FRIENDS والجوائز بدوره يمنحه شارة مماثلة لتلك المستخدمة في SO. تم تعيين النظام بحيث عندما يتم الانتهاء من المهمة (التصويت حتى، التعليق، الخ) من قبل المستخدم، يتم تسجيل USER_ID وقائمة الانتظار التي سيتم تقييمها في 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;
        }
    }
}

وأعتقد أن لدينا لاستخدام وحدة التقييم () ولكن لست متأكدا كيف، أي مساعدة سيكون موضع تقدير!

هل كانت مفيدة؟

المحلول

إذا $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 سوف تقيم لأول مرة كما ثابت الذي هو ممارسة سيئة، انظر> وأ href = "http://us2.php.net/manual/en/language.types.array.php" يختلط = "نوفولو noreferrer "> PHP المرجعي: صفائف

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top