views:

626

answers:

3

Hi,

In PHP, say that you have an associative array like this:

$pets = array(
    "cats" => 1,
    "dogs" => 2,
    "fish" => 3
);

How would I find the key with the lowest value? Here, I'd be looking for cats.

Is there some built in PHP function that I've missed which does this? It would also be great if there was a solution that accounted for several values being identical, as below:

$pets = array(
    "cats" => 1,
    "dogs" => 1,
    "fish" => 2
);

Above, I wouldn't mind if it just output either; cats or dogs.

Thanks in advance.

+1  A: 
$min_val = null;
$min_key = null;
foreach($pets as $pet => $val) {
  if ($val < $min_val) {
    $min_val = $min;
    $min_key = $key;
  }
}

You can also flip the array and sort it by key:

$flipped = array_flip($pets);
ksort($flipped);

Then the first key is the minimum, and its value is the key in the original array.

Jeff Ober
You forgot to close a bracket.And using array_keys and min, as suggested by SilentGhost will be easier and faster.
Damien MATHIEU
Thanks, I fixed the bracket.
Jeff Ober
+15  A: 

array_keys is your friend:

$pets = array(
    "cats" => 1,
    "dogs" => 2,
    "fish" => 3
);
array_keys($pets, min($pets));  # array('cats')

P.S.: there is a dup here somewhere on SO (it had max instead of min, but I can distinctly remember it).

SilentGhost
That's a clever one =) Maybe you should mention that it returns a list of 1 or more values (unless the array is empty.)
Blixt
I've fixed the comment, I hope it'll be clear now.
SilentGhost
Thanks for a great answer. :)
Philip Morton
very nice and elegant answer
easement
A: 

Might try looking into these:

Phill Pafford