配列内の最大値のインデックスを返す


92

次のような配列から、配列の最大値のインデックスを取得するにはどうすればよいですか。以下の配列の場合、望ましい結果は「11」になります。

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

しばらく経ちましたが、配列はすでにソートされているようです(降順)。それは悪い例ですか本当にただの必要性のいずれかreset($arr); echo key($arr);:)
ジャック

回答:


209

私の解決策は次のとおりです。

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

注:
この方法で、特定の最大値に関連するすべてのキーを取得できます。

すべての中1つのキーのみに関心がある場合は、$ maxs [0]を使用してください。


2つの値が同じかどうかを確認するにはどうすればよいですか?
alphaMale 2013

重複がある場合は2つ以上の値を持っている場合は、結果を確認することができます
フリオPopócatl

@AlphaMaleは、定義上最大値が1つしかないため、2つのキーを意味するarray_keysと思います。値
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を返します。

針が干し草の山で複数回見つかった場合、最初に一致したキーが返されます。一致するすべての値のキーを返すには、代わりにオプションのsearch_valueパラメーターを指定してarray_keys()を使用します。


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
最初のアイテムのキーと値をデフォルト値として使用することをお勧めします。
ガンボ

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/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 2009

1
私はそれが私の実装ではないと述べました。OPが明らかに自分でできないのは、すばやく汚いコピー/貼り付けでした、ミスター。
ティムールアサリエフ2009

3
うそをつくつもりはない、あなたは私を少し笑わせた。配列の各反復のmax()が気になりますか?それは「悪い習慣よりも悪い」です。いいえ、そうは思いません。それは最もエレガントではありませんが、機能します。
ショーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.