У меня есть PHP, в котором я хочу изменить переменную на основе максимального результата массива. Он мне нужен, чтобы установить сообщение, если есть ничья по максимальному значению, я почти на месте (результаты возвращаются правильно, кроме того, есть ли ничья)
Любая помощь приветствуется :)
$ex_res = ($ex1+$ex2)/2;
$ag_res = ($ag1+$ag2)/2;
$con_res = ($con1+$con2)/2;
$em_res = ($em1+$em2)/2;
$op_res = ($op1+$op2)/2;
$highest = max($ex_res ,$ag_res, $con_res, $em_res, $op_res);
if ($highest == $ex_res) {$dom_trait = "EXTROVERSION";}else
if ($highest == $ag_res) {$dom_trait = "AGREEABLENESS";}else
if ($highest == $con_res) {$dom_trait = "CONSCIENTIOUSNESS";}else
if ($highest == $em_res) {$dom_trait = "EMOTIONAL";}else
if ($highest == $op_res) {$dom_trait = "OPENNESS";}else {
$dom_trait = "NONE";
}
Вопрос в том, какой результат вы хотите / ожидаете, если, например, $ex_res и $ag_res одинаковы?
@ DanielBürckner OP хочет отобразить сообщение, если какое-либо из значений равно
@ADyson: Любое из значений или только самое высокое из значений?
Карл, вычисление максимального значения выполняется в функции max(), и, если два значения считаются равными, просто возвращает первое из полученных значений. Поэтому, если есть галстук, это непрозрачно для вас. Если вы сравниваете полностью числа, может быть достаточно просто написать код сравнения самостоятельно. Таким образом вы можете явно проверить равные значения и действовать соответствующим образом.
@ DanielBürckner говорит, что "ничья по максимальному значению", но на самом деле это не имеет смысла. Существует только одно «максимальное» значение, определенное функцией. В любом случае, см. Мой комментарий выше. Невозможно использовать функцию max () для проверки равных значений при любом определении. Решение для OP - создать специальный код для проверки.






Итак, это ваша ценность:
$ex_res = ($ex1+$ex2)/2;
$ag_res = ($ag1+$ag2)/2;
$con_res = ($con1+$con2)/2;
$em_res = ($em1+$em2)/2;
$op_res = ($op1+$op2)/2;
Чтобы узнать, есть ли у вас ничья, вы можете просто построить массив и использовать array_count_value(), чтобы проверить, присутствует ли одно и то же значение несколько раз:
$array = array($ex_res, $ag_res, $con_res, $em_res, $op_res);
Например, у вас есть $array = array(10, 20, 20, 15, 18);.
$array_count_value = array_count_values($array);
Результат:
array (size=4)
10 => int 1
20 => int 2
15 => int 1
18 => int 1
Теперь просто сделайте то, что вы уже делаете, чтобы получить значение $hightest:
$highest = max($ex_res ,$ag_res, $con_res, $em_res, $op_res);
Итак, в моем примере у вас есть:
$highest = max(10, 20, 20, 15, 18);
$highest = 20;
Итак, чтобы узнать, есть ли ничья, просто проверьте, есть ли у вас какое-то значение> 1:
foreach ($array_count_value as $result => $count) {
if ($count > 1 && $result === $highest) {
echo "Tie for highest value " . $result;
}
}
РЕДАКТИРОВАТЬ: как предлагается в комментарии, вы тоже можете это сделать:
if ($array_count_value[$highest] > 1)
echo "Tie for highest value " . $highest;
В моем примере результат: Tie for highest value 20
Это то, что вы ищете?
Я предложил отредактировать ваш ответ, который также проверяет, является ли повторяющееся значение самым высоким. Я считаю, что это то, чего хотела ОП.
Лучше использовать &&, а не AND, поскольку && имеет более высокий приоритет, чем AND, как описано в php.net, пример 1.
Разве $array_count_value[$highest] > 1 не был бы проще, чем зацикливание?
Вы также используете $highest, но никогда не устанавливали его - это может быть полезно для OP
это отлично работает - досадно, что я не понимал, что у решения может быть проблема с нецелыми числами (так как мои результаты являются средними, это иногда запускается)
что ты на самом деле спрашиваешь?