PHP два равных максимальных значения

У меня есть 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";
}

что ты на самом деле спрашиваешь?

treyBake 03.07.2018 16:14

Вопрос в том, какой результат вы хотите / ожидаете, если, например, $ex_res и $ag_res одинаковы?

Daniel Bürckner 03.07.2018 16:19

@ DanielBürckner OP хочет отобразить сообщение, если какое-либо из значений равно

ADyson 03.07.2018 16:23

@ADyson: Любое из значений или только самое высокое из значений?

Daniel Bürckner 03.07.2018 16:24

Карл, вычисление максимального значения выполняется в функции max(), и, если два значения считаются равными, просто возвращает первое из полученных значений. Поэтому, если есть галстук, это непрозрачно для вас. Если вы сравниваете полностью числа, может быть достаточно просто написать код сравнения самостоятельно. Таким образом вы можете явно проверить равные значения и действовать соответствующим образом.

ADyson 03.07.2018 16:25

@ DanielBürckner говорит, что "ничья по максимальному значению", но на самом деле это не имеет смысла. Существует только одно «максимальное» значение, определенное функцией. В любом случае, см. Мой комментарий выше. Невозможно использовать функцию max () для проверки равных значений при любом определении. Решение для OP - создать специальный код для проверки.

ADyson 03.07.2018 16:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
129
1

Ответы 1

Итак, это ваша ценность:

$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

Это то, что вы ищете?

Я предложил отредактировать ваш ответ, который также проверяет, является ли повторяющееся значение самым высоким. Я считаю, что это то, чего хотела ОП.

Daniel Bürckner 03.07.2018 16:29

Лучше использовать &&, а не AND, поскольку && имеет более высокий приоритет, чем AND, как описано в php.net, пример 1.

Can O' Spam 03.07.2018 16:31

Разве $array_count_value[$highest] > 1 не был бы проще, чем зацикливание?

Nigel Ren 03.07.2018 16:32

Вы также используете $highest, но никогда не устанавливали его - это может быть полезно для OP

Can O' Spam 03.07.2018 16:35

это отлично работает - досадно, что я не понимал, что у решения может быть проблема с нецелыми числами (так как мои результаты являются средними, это иногда запускается)

karl jones 03.07.2018 18:52

Другие вопросы по теме