Повертає індекс найвищого значення в масиві


92

З масиву, який виглядає приблизно так, як я можу отримати індекс найвищого значення в масиві. Для наведеного нижче масиву бажаним результатом буде '11'.

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

Минув якийсь час, але ваш масив вже здається відсортованим (за спаданням); або це поганий приклад, або вам насправді просто потрібно reset($arr); echo key($arr);:)
Jack

Відповіді:


209

Моє рішення:

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

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

Якщо вас цікавить лише один ключ серед усіх, просто використовуйте $ maxs [0]


Як побачити, чи однакові два значення?
AlphaMale

Ви можете перевірити результат, якщо має два або більше значень, якщо є дублікати
Julio Popócatl

@AlphaMale ви маєте на увазі два ключі, я гадаю, оскільки максимальне значення - це лише один за визначенням .. @JustinE, якщо ви не хочете дублювати ключі, просто знайдіть max (тобто уникайте array_keys), і ви отримаєте лише один ключ, що відповідає max значення
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

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
Краще використовувати ключ і значення першого елемента як значення за замовчуванням.
Гамбо

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.