返回数组中最大值的索引


92

从如下所示的数组中,如何获取数组中最大值的索引。对于下面的数组,期望的结果将是'11'。

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

已经有一段时间了,但是您的数组似乎已经排序(降序);要么它是一个坏榜样,或者你真的只需要reset($arr); echo key($arr);:)
杰克

Answers:


209

我的解决方案是:

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

注意:
这样,您可以检索与给定最大值相关的每个键

如果您只对其中一个键感兴趣,只需使用$ maxs [0]


如何查看两个值是否相同?
AlphaMale

您可以检查结果是否具有两个或多个值(如果有重复的话)
JulioPopócatl13年

@AlphaMale您是指两个键,因为根据定义,最大值仅是一个。.@JustinE如果您不希望重复的键只需搜索max(即避免array_keys),您将只获得一个对应于max的键价值
drAlberT 2014年

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。

如果在干草堆中多次发现needle,则返回第一个匹配的键。要返回所有匹配值的键,请使用array_keys()和可选的search_value参数。


12

我知道它已经回答了,但是我发现这是一个更优雅的解决方案:

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

和瞧!


4
reset是没有必要的,顺便说一句。
kuroi neko 2014年

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
$newarr=arsort($arr);
$max_key=array_shift(array_keys($new_arr));

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/zh/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
我提到的不是我的实现。这显然是快速而肮脏的复制/粘贴,OP显然不能做到这一点,先生。
Timur Asaliev 09年

3
不会说谎,你让我有点笑。您是否担心数组中每次迭代的max()?这是“比坏习惯还糟”。不,我不相信。它不是最优雅的,但可以。
肖恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.