2012-03-19 3 views
0

У меня есть функция, как этотПростой PHP, если еще петля необходима помощь

function cp_module_ranks_getRank($uid){ 
     return cp_module_ranks_pointsToRank(cp_getPoints($uid)); 
    } 

Она возвращает ранг члена, основанный на точках я набор. Например мои настройки имеет

  1. 250 Очки = Bronze
  2. 1000 Очки = Silver
  3. 2500 Очки = Gold
  4. 10000 Очки = Алмазные
  5. 25000 Очки = Платина

Так, если пользователь имеет 11234 точек, то это возвращаемое значение функции как Diamond

Теперь я хотел бы установить переменную на основе этого ранга.

$affdays переменная

Я имею в виду, как этот

If user rank is Bronze $affdays = 30 
If user rank is Silver $affdays = 60 
If user rank is Gold $affdays = 90 
If user rank is Diamond $affdays = 180 
If user rank is Platinum $affdays = 360 
Default $affdays = 10 

Спасибо.

+0

Почему вы не используете массив? – safarov

ответ

4

Вы можете использовать переключатель заявление:

$user_rank = cp_module_ranks_getRank($id); 

switch($user_rank) { 
    case 'Bronze': 
     $affdays = 30; 
     break; 
    case 'Silver': 
     $affdays = 60; 
     break; 
    case 'Gold': 
     $affdays = 90; 
     break; 
    case 'Diamond': 
     $affdays = 180; 
     break; 
    case 'Platinum': 
     $affdays = 360; 
     break; 
    default: 
     $affdays = 10; 
} 
+0

Привет, спасибо. Но моя главная проблема заключается в том, что я не знаю, как привести эту функцию 'cp_module_ranks_getRank ($ uid)' inner switch statement. Нужно ли мне назначать переменную '$ user_rank' в этой функции ?. Если да, то как? – user1091558

+0

Я не уверен, чего вы на самом деле хотите. Вы хотите, чтобы функция 'cp_module_ranks_getRank()' возвращала значение '$ affdays'? – jasonlfunk

+0

Нет. Cp_module_ranks_getRank() возвращает значение ранга, такое как Bronze, которое является правильным. Но вы использовали новую переменную '$ user_rank'. Я php noob. Вот почему я задал этот вопрос. Но теперь ваша новая переменная сбивает меня с толку. Я имею в виду, откуда вы передаете ценности ?.У вашего кода нет связи с моей функцией cp_module_ranks_getRank(). – user1091558

4

Как насчет создания массива и поиска соответствующего примера?

$rank = 'Bronze'; 
$rank_days = array(
    'Bronze' => 30, 
    'Silver' => 60 
    // etc 
); 

if (array_key_exists($rank, $rank_days)) { 
    $affdays = $rank_days[$rank]; // 30 
} else { 
    $affdays = 10; 
} 
+0

+1 это намного лучше, чем несколько ifs или оператор switch – Robbie

+0

Привет, можете ли вы рассказать мне, как назначить эту функцию переменной? Нужно ли мне так использовать? '$ rank = cp_module_ranks_getRank ($ uid);' и как насчет значения по умолчанию? – user1091558

+0

Это выглядит нормально. Я просто назначаю ранги как ключи массива и количество дней как соответствующее значение; почему бы не проверить, существует ли соответствующий массив в массиве с помощью 'array_key_exists()' и присваивать значение по умолчанию, если это необходимо? – rjz

2

использовать оператор переключения

switch ($user_rank) { 
    case "bronze": 
     //code 
    break; 
    case "silver": 
     //code 
    break; 
    default: 
     $affdays = 10; 
    break; 
    //and so on 
} 

это как заявление, если с несколькими «ELSEIF» и он работает гораздо быстрее

+0

и гораздо легче читать. – vascowhite

1

Следующий код должен сделать трюк:

if (cp_module_ranks_getRank($user) === 'Bronze') { 
     $affdays = 30; 
    } else if (cp_module_ranks_getRank($user) === 'Silver') { 
     $affdays = 60; 
    } else if (cp_module_ranks_getRank($user) === 'Gold') { 

    ... 

    } else { 
     $affdays = 10; 
    } 

EDIT: Ответ оператора switch намного лучше, чем этот

Смежные вопросы