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

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']));
xmatzx
источник
0
$newarr=arsort($arr);
$max_key=array_shift(array_keys($new_arr));
dnagirl
источник
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 () для каждой итерации массива? Это «хуже, чем плохая практика». Нет, не верю. Не самый элегантный, но работает.
Шон