Возвращает индекс самого высокого значения в массиве


92

Из массива, который выглядит примерно так, как я могу получить индекс самого высокого значения в массиве. Для приведенного ниже массива желаемый результат будет «11».

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)

Прошло некоторое время, но ваш массив уже кажется отсортированным (по убыванию); либо это плохой пример, либо вам действительно просто нужно reset($arr); echo key($arr);:)
Ja͢ck

Ответы:


209

Мое решение:

$maxs = array_keys($array, max($array))

Примечание:
таким образом вы можете получить каждый ключ, связанный с заданным максимальным значением .

Если вас интересует только один ключ из всех, просто используйте $ maxs [0]


Как узнать, совпадают ли два значения?
AlphaMale

вы можете проверить результат, если есть два или более значений, если есть дубликаты
Хулио Попокатль

@AlphaMale, вы имеете в виду два ключа, я полагаю, поскольку максимальное значение по определению только одно .. @JustinE, если вы не хотите, чтобы повторяющиеся ключи, просто ищите максимум (т.е. избегайте array_keys), и вы получите только один ключ, соответствующий максимум значение
drAlberT

36
<?php

$array = array(11 => 14,
               10 => 9,
               12 => 7,
               13 => 7,
               14 => 4,
               15 => 6);

echo array_search(max($array), $array);

?>

array_search () возвращаемые значения:

Возвращает ключ для иглы, если он найден в массиве, в противном случае - FALSE.

Если игла найдена в стоге сена более одного раза, возвращается первый соответствующий ключ . Чтобы вернуть ключи для всех совпадающих значений, используйте вместо этого array_keys () необязательный параметр search_value.


12

Я знаю, что на него уже ответили, но вот решение, которое я считаю более элегантным:

arsort($array);
reset($array);
echo key($array);

и вуаля!


4
resetне надо, кстати.
kuroi neko 05

3

В других ответах может быть более короткий код, но этот должен быть наиболее эффективным и легким для понимания.

/**
 * Get key of the max value
 *
 * @var array $array
 * @return mixed
*/
function array_key_max_value($array)
{
    $max = null;
    $result = null;
    foreach ($array as $key => $value) {
        if ($max === null || $value > $max) {
            $result = $key;
            $max = $value;
        }
    }

    return $result;
}

1

Что-то вроде этого должно помочь

function array_max_key($array) {
  $max_key = -1;
  $max_val = -1;

  foreach ($array as $key => $value) {
    if ($value > $max_val) {
      $max_key = $key;
      $max_val = $value;
    }
  }

  return $max_key;
}

3
Лучше использовать ключ и значение первого элемента в качестве значения по умолчанию.
Gumbo,

1

Мое решение для получения более высокого ключа следующее:

max(array_keys($values['Users']));


0
<?php 
$array =  array (
    '11' => 14,
    '10' => 9,
    '12' => 7,
    '13' => 7,
    '14' => 4,
    '15' => 6
);

foreach ($array as $key => $value) {
   if ($value >= $max) 
        $max = max($array);          
}
echo " The array in Maximum Value :".$max."<br/>";
?> 

-7

Функция взята из http://www.php.net/manual/en/function.max.php

function max_key($array) {
    foreach ($array as $key => $val) {
        if ($val == max($array)) return $key; 
    }
}

$arr = array (
    '11' => 14,
    '10' => 9,
    '12' => 7,
    '13' => 7,
    '14' => 4,
    '15' => 6
);

die(var_dump(max_key($arr)));

Работает как шарм


8
Не говоря уже о производительности. Переход через массив, проверка максимального значения каждый раз даже хуже, чем "плохая практика".
bisko

1
Я упомянул, что это не моя реализация. Это было быстрое и грязное копирование / вставка, которое оператор, очевидно, не мог сделать сам, мистер.
Тимур Асалиев

3
Не собираюсь врать, ты заставил меня немного усмехнуться. Вас беспокоит max () для каждой итерации массива? Это «хуже, чем плохая практика». Нет, не верю. Не самый элегантный, но работает.
Шон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.