2013-07-18 3 views
0

Я пытаюсь сделать шкалы оценок для группировки переменных. Я сталкиваюсь с несколькими проблемами и на данный момент полностью мертв. Может ли кто-нибудь дать мне некоторую помощь в том, как это сделать? Очень ценим!Переменные PHP в функциях

function ovr_grade($talent, $physical, $entertainment, $reputation, $overness) { 
if ($talent || $physical || $entertainment || $reputation || $overness >= 90) { 
return "Grade: A"; 
} elseif ($talent || $physical || $entertainment || $reputation || $overness >= 80) { 
return "Grade: B"; 
} elseif ($talent || $physical || $entertainment || $reputation || $overness >= 70) { 
return "Grade: C"; 
} elseif ($talent || $physical || $entertainment || $reputation || $overness >= 60) { 
return "Grade: D"; 
} elseif ($talent || $physical || $entertainment || $reputation || $overness >= 50) { 
return "Grade: E"; 
} elseif ($talent || $physical || $entertainment || $reputation || $overness <= 49) { 
return "Grade: F"; 
} else { 
return "N/A"; 
} 
} 

echo ovr_grade(); 
+2

, что именно проблема? вы хотите проверить, является ли одна из переменных выше 90, 80 и т. д.? Вы просто проверяете наличие всех переменных, кроме $ overness – everconfusedGuy

+2

, не устанавливая аргументы функции в вызове функции. –

+4

Вы сравниваете '$ talent, $ physical, $ entertainment, $ Reputation' как логическое значение.Вы должны перестроить код на '($ talent> = 90 || $ physical> = 90 || $ entertainment> = 90 || $ репутация> = 90 || $ overness> = 90)' –

ответ

0

я aaprreciate Ответ "Джеймс Андерсон" так +1 его расчет, но не более() может быть уменьшена

$grades= max($talent,$physical,$entertainment,$reputation); 

if($grades>90) 
{ 
return "Grade: A"; 
} 
elseif ($grades>80) 
{ 
return "Grade: B"; 
} 
. 
. 
. 
. 
. 
. 
else 
{ 
return "N/A"; 
} 

обновление:

, к сожалению, я не могу получить глубоко в на ваш «комментарий» в любом случае, я думаю, вам нужна общая функция, которая возвращает оценку для каждого фактора (например: физическое, развлекательное ...)

function getGrades($factor) 
{ 

$grades= $factor; 

if($grades>90) 
{ 
return "Grade: A"; 
} 
elseif ($grades>80) 
{ 
return "Grade: B"; 
} 
. 
. 
. 
. 
. 
. 
else 
{ 
return "N/A"; 
} 
} 

и сделать вызов, чтобы получить оценку для каждого

echo "Talent : " . getGrades($talent); 
echo "Physical : " . getGrades($physical); 
+0

Это сработало, однако я искал способ показать каждый класс самостоятельно. В основном, эхо-рейтинг для таланта $, один для $ физического и т. Д. Кажется, что это группа, и я не могу назвать только один. Какие-либо предложения? – Devereaux

+0

@ user2464279 проверено обновление? –

+1

Спасибо! Это сработало отлично! – Devereaux

0

Я думаю, вы должны перестроить свои условия для этого:

function ovr_grade($talent, $physical, $entertainment, $reputation, $overness) { 
if ($talent >= 90 || $physical >= 90 || $entertainment >= 90 || $reputation >= 90 || $overness >= 90) { 
return "Grade: A"; 
} elseif ($talent >= 80 || $physical >= 80 || $entertainment >= 80 || $reputation >= 80 || $overness >= 80) { 
return "Grade: B"; 
} elseif ($talent >= 70 || $physical >= 70 || $entertainment >= 70 || $reputation >= 70 || $overness >= 70) { 
return "Grade: C"; 
} elseif ($talent >= 60 || $physical >= 60 || $entertainment >= 60 || $reputation >= 60 || $overness >= 60) { 
return "Grade: D"; 
} elseif ($talent >= 50 || $physical >= 50 || $entertainment >= 50 || $reputation >= 50 || $overness >= 50) { 
return "Grade: E"; 
} elseif ($talent <= 49 || $physical <= 49 || $entertainment <= 49 || $reputation <= 49 || $overness <= 49) { 
return "Grade: F"; 
} else { 
return "N/A"; 
} 
} 

echo ovr_grade(90,90,90,90,90);//input their respective values 

Так каждое значение будет сравнить с численным и не логическим значением.

+1

вам тоже нужно исправить вызов функции – DevZer0

+0

. будет пересматривать. –

1
function ovr_grade($talent, $physical, $entertainment, $reputation, $overness) { 
    $values = array($talent, $physical, $entertainment, $reputation, $overness); 
    $average = array_sum($values)/count($values); 
    if ($average >=90) 
     return "Grade: A"; 
    if ($average >=80) 
     return "Grade: B"; 
    if ($average >=70) 
     return "Grade: C"; 
    if ($average >=60) 
     return "Grade: D"; 
    if ($average >=50) 
     return "Grade: E"; 
    if ($average <=49) 
     return "Grade: F"; 
    else 
     return "N/A"; 
} 
2

попробовать:

if (max($talent,$physical,$entertainment,$reputation) >= 90) 
{ 
     return "Grade: A"; 
} 
elseif ........... 
+1

или сохраните '$ max = max ($ talent, $ physical, $ entertainment, $ репутация)' в переменной, поэтому у вас есть 'if ($ max> = 90) {...} elseif ($ max> = 80) ':) –

+0

Это сработало, однако я искал способ показать каждый класс самостоятельно. В основном, эхо-рейтинг для таланта $, один для $ физического и т. Д. Кажется, что это группа, и я не могу назвать только один. Какие-либо предложения? – Devereaux

0

Прежде всего, Вы писали некоторые подробности о ваших требованиях по поводу результата вы хотите от этой функции. Я проверил вашу функцию, и у нее есть какая-то серьезная проблема.

Теперь, если ваше требование состоит в том, чтобы показать «Grade: A», если кто-то получает 90 в любой категории (например, 90 в $ талант или 90 в $ физическом или 90 в $ развлечении и т. Д.), То функция, которую вы написали, работающ отлично. Все, что вам нужно сделать, это инициализировать функцию:

function ovr_grade($talent, $physical, $entertainment, $reputation, $overness) { 
if ($talent >= 90 || $physical >= 90 || $entertainment >= 90 || $reputation >= 90 || $overness >= 90) { 
return "Grade: A"; 
} elseif ($talent >= 80 || $physical >= 80 || $entertainment >= 80 || $reputation >= 80 || $overness >= 80) { 
return "Grade: B"; 
} elseif ($talent >= 70 || $physical >= 70 || $entertainment >= 70 || $reputation >= 70 || $overness >= 70) { 
return "Grade: C"; 
} elseif ($talent >= 60 || $physical >= 60 || $entertainment >= 60 || $reputation >= 60 || $overness >= 60) { 
return "Grade: D"; 
} elseif ($talent = 50 || $physical = 50 || $entertainment = 50 || $reputation = 50 || $overness >= 50) { 
return "Grade: E"; 
} elseif ($talent <= 49 || $physical <= 49 || $entertainment <= 49 || $reputation <= 49 || $overness <= 49) { 
return "Grade: F"; 
} else { 
return "N/A"; 
} 
} 

echo ovr_grade(90,90,90,90,90); 

Тогда вы должны получить желаемый результат. Но если вы хотите, чтобы показать «класс: А», когда кто-то получает 90 во всей категории, то вы должны изменить свое состояние, как показано ниже:

function ovr_grade($talent, $physical, $entertainment, $reputation, $overness) { 
if ($talent >= 90 && $physical >= 90 && $entertainment >= 90 && $reputation >= 90 && $overness >= 90) { 
return "Grade: A"; 
} elseif ($talent >= 80 && $physical >= 80 && $entertainment >= 80 && $reputation >= 80 && $overness >= 80) { 
return "Grade: B"; 
} elseif ($talent >= 70 && $physical >= 70 && $entertainment >= 70 && $reputation >= 70 && $overness >= 70) { 
return "Grade: C"; 
} elseif ($talent >= 60 && $physical >= 60 && $entertainment >= 60 && $reputation >= 60 && $overness >= 60) { 
return "Grade: D"; 
} elseif ($talent = 50 && $physical = 50 && $entertainment = 50 && $reputation = 50 && $overness >= 50) { 
return "Grade: E"; 
} elseif ($talent <= 49 && $physical <= 49 && $entertainment <= 49 && $reputation <= 49 && $overness <= 49) { 
return "Grade: F"; 
} else { 
return "N/A"; 
} 
} 

echo ovr_grade(90,90,90,90,90); 

Я думаю, что это поможет вам. Если вам нужно больше ничего, не стесняйтесь спрашивать.

Благодаря

0

Вы могли бы пересмотреть его:

function ovr_grade($talent, $physical, $entertainment, $reputation, $overness) { 
    $max_val = max($talent, $physical, $entertainment, $reputation, $overness); 

    if ($max_val >= 90) { 
     return "Grade A"; 
    } elseif ($max_val >= 80) { 
     return "Grade B"; 
    } elseif ($max_val >= 70) { 
     return "Grade C"; 
    } elseif ($max_val >= 60) { 
     return "Grade D"; 
    } elseif ($max_val >= 50) { 
     return "Grade E"; 
    } elseif ($max_val < 50) { 
     return "Grade F"; 
    } else { 
     return "N/A"; 
    } 
0

я думаю, что нет необходимости возвращаться "N/A"; когда ничто не больше 50. просто возвращает «грейд: F»

0

Вдохновленный Джеймсом

$grade = array(
         'A'=>90, 
         'B'=>80, 
         'C'=>70, 
         'D'=>60, 
         'E'=>50, 
         'F'=>40,     
         ); 

     $obtained = max($talent,$physical,$entertainment,$reputation); 
     $grading_flag = floor($obtained/10)*10; 
     echo $grade[$gr]; 

    /* ambiguous about your fail status */ 
Смежные вопросы