14

I'm using the max() function to find the largest value in an array. I need a way to return the key of that value. I've tried playing with the array_keys() function, but all I can get that to do is return the largest key of the array. There has to be a way to do this but the php manuals don't mention anything.

Here's a sample of the code I'm using:

$arrCompare = array('CompareOne' => $intOne,
                    'CompareTwo' => $intTwo,
                    'CompareThree' => $intThree,
                    'CompareFour' => $intfour);

$returnThis = max($arrCompare);

I can successfully get the highest value of the array, I just can't get the associated key. Any ideas?


Edit: Just to clarify, using this will not work:

$max_key = max( array_keys( $array ) );

This compares the keys and does nothing with the values in the array.

Cloudkiller
  • 1,616
  • 3
  • 18
  • 26

3 Answers3

25

array_search function would help you.

$returnThis = array_search(max($arrCompare),$arrCompare);
kravemir
  • 10,636
  • 17
  • 64
  • 111
8

If you need all keys for max value from the source array, you can do:

$keys = array_keys($array, max($array));
Funcraft
  • 1,649
  • 2
  • 15
  • 23
  • Prefer this one, though it's perhaps less obvious than `array_search()`. I didn't even know that `array_keys` could take a `$search_value` as its second argument! – Tom Auger Mar 16 '16 at 17:00
  • This returned the SECOND highest key. I went with this answer and that worked in my case : https://stackoverflow.com/questions/6126066/search-for-highest-key-index-in-an-array – Cagy79 Aug 14 '17 at 21:23
4

Not a one-liner, but it will perform the required task.

function max_key($array)
{
    $max = max($array);
    foreach ($array as $key => $val)
    {
        if ($val == $max) return $key;
    }
}

From http://cherryblossomweb.de/2010/09/26/getting-the-key-of-minimum-or-maximum-value-in-an-array-php/

Evan Mulawski
  • 54,662
  • 15
  • 117
  • 144