배열에서 가장 높은 값의 인덱스 반환


92

다음과 같은 배열에서 배열에서 가장 높은 값의 인덱스를 어떻게 얻을 수 있습니까? 아래 배열의 경우 원하는 결과는 '11'입니다.

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

1
오래되었지만 배열이 이미 정렬 된 것 같습니다 (내림차순). 하나는 나쁜 예입니다 또는 당신이 정말 필요 reset($arr); echo key($arr);:)

답변:


209

내 솔루션은 다음과 같습니다.

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

참고 :
이렇게하면 주어진 최대 값 과 관련된 모든 키를 검색 할 수 있습니다.

모두 중 하나의 키 에만 관심이 있다면 $ maxs [0]을 사용하십시오 .


두 값이 동일한 지 확인하는 방법은 무엇입니까?
AlphaMale 2013-02-13

두 개 이상의 값이있는 경우 중복이있는 경우에는 결과를 확인하실 수 있습니다
훌리오 Popócatl에게

@AlphaMale 당신은 내가 생각하는 두 개의 키를 의미합니다. 최대 값은 정의에 따라 하나뿐입니다 .. @JustinE 중복 키를 원하지 않는 경우 단순히 최대 값을 검색하면 (예 : 피하십시오 array_keys) 최대 값에 해당하는 하나의 키만 얻을 수 있습니다. value
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를 반환합니다.

바늘이 haystack에서 두 번 이상 발견되면 일치 하는 첫 번째 키 가 반환됩니다. 일치하는 모든 값에 대한 키를 반환하려면 대신 선택적인 search_value 매개 변수와 함께 array_keys ()를 사용합니다.


12

이미 답변을 받았지만 여기에 더 우아한 해결책이 있습니다.

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

그리고 짜잔!


4
resetBTW, 필요하지 않습니다.
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/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
내 구현이 아니라고 언급했습니다. OP가 분명히 스스로 할 수없는 것은 빠르고 더러운 복사 / 붙여 넣기였습니다.
Timur Asaliev

3
거짓말을하지 않을 거에요. 배열을 통한 각 반복에 대해 max ()에 대해 걱정하고 있습니까? 그것은 "나쁜 습관보다 더 나쁘다"입니다. 아뇨, 믿지 않습니다. 가장 우아하지는 않지만 작동합니다.
Sean
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.