배지 시스템 및 저장 조건으로 변수?
-
22-08-2019 - |
문제
나는 사용자 통계를 확인하는 코드를 작성하려고 노력하고 있습니다. 포인트, 순위 또는 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 참조 : 배열