Максимальное значение

182
26 апреля 2019, 18:10

Нужна помощь.
Есть такой код(опроса):

<?php
$fanta = [2, "Вам нравится Фанта"];
$kola = [5, "Вам нравится кола"];
$pepsi = [3, "Вам нравится пепси"];
echo max($fanta[0], $kola[0], $pepsi[0]);
?>

У меня получается так, что PHP выводит на экран первое значение, а надо вывести на экран второе значение массива, где первое значение больше остальных, не используя MySQL.

Answer 1
$fanta = [2, "Вам нравится Фанта"];
$kola = [5, "Вам нравится кола"];
$pepsi = [3, "Вам нравится пепси"];
$x=[$fanta,$kola,$pepsi];
usort($x, function($a, $b){return ($b[0]-$a[0]);});
echo $x[0][1];  
Answer 2

В вашем случае только через множество if - else.

$max = max($fanta[0], $kola[0], $pepsi[0]);
if($fanta[0] == $max) echo $fanta[1]
else if ($kola[0] == $max) echo $kola[1]
else echo $pepsi[1];

Это ужасно. Поэтому вам сперва следует переработать вашу модель данных. Например так:

$input = [
            ['count' => 2, 'text' => "Фанта"],
            ['count' => 5, 'text' => "кола"],
            ['count' => 3, 'text' => "пепси"]
         ];
usort($input, function (int $a, int $b) { return -($a['count'] <=> $b['count']); });
echo "Вам нравится ".$input[0]['text'];

На самом деле вариантов, как организовать данные лучше, чем это сделано у вас - множество.

PS Кола по английски будет cola

Answer 3

Не шибко актуально для текущего вопроса, здесь массив содержит только 3 элемента, но тем не менее. Задача поиска максимального значения решается за один проход по массиву, ее сложность n, в то время как использование сортировки и взятие первого элемента, как минимум предполагает сложность nlogn.

Так что если топикстартеру надо найти текст из массива с максимальным элементом, то как и в других случаях, сначала надо преобразовать три переменные к одному массиву.

$data = [$fanta, $kola, $pepsi];

Затем, можно, например, сделать числовые значения ключами. Найти максимум для ключей и вывести соответствующий элемент.

$data = array_column($data, 1, 0);
$max  = max(array_keys($data));
$result = $data[$max];

либо самый простой способ - использование простого цикла и сравнений:

$max = -1; //PHP_INT_MIN или $data[0][0];
$mv  = null;
foreach($data as list($v,$t)){
    if($max < $v){
       $max = $v;
       $mv  = $t;
   }
}
echo $mv;
READ ALSO
Форма в форме php

Форма в форме php

Подскажите пожалуйста, какие есть альтернативы форма в форме phpЕсть форма, которая тянется через всю страницу, как в этой форме сделать еще...

164
галерея с разными цветами

галерея с разными цветами

Есть несколько картинок разных цветов(красный,зелёный,жёлтый), как с помощью jquery сделать сортировку по цвету, те нажимаешь на красный цвет,...

195
Миграция Laravel could not find driv

Миграция Laravel could not find driv

Работаю в Sublime Text, нужно установить миграцию с БД MySQLОшибка "could not find drivers"

175
Путь к папке php

Путь к папке php

Подскажите пожалуйста, есть код который создает папку:

167