# How to return elements of an array with the highest values?

## Issue

In my code I have two elements which has the same age `"Joe"=>"43"` and `"Rob"=>"43"` .

My code output is:

Joe

I want to output:

Joe and Rob

Because they has the highest value.

This is my code:

``````<?php
\$cur = 1;

\$age = array("Peter" => "35", "Ben" => "37", "Joe" => "43", "Rob" => "43");
\$new_array = array();
arsort(\$age);
\$new_array = \$age;
\$key = array_search(max(\$new_array), \$new_array);

while (\$cur > 0) {
echo \$key;
\$cur--;
}
?>
``````

## Solution

I’d change the keys and values in the array, then sort by key and return the values of the first key:

``````\$ages = array("Peter" => "35", "Ben" => "37", "Joe" => "43", "Rob" => "43");
\$new = array();

foreach (\$ages as \$name => \$age) {
\$new[\$age][] = \$name;
}

uksort(\$new, function(\$ka, \$kb) { return \$kb - \$ka; }); // or just krsort(\$new);
\$new = array_values(\$new); // <- to use this you have to have at least PHP 5.4

// if you have PHP < 5.4 you can simply do it in two steps:
// \$new = array_values(\$new);
// \$new = \$new;
``````

See it in action!

EDIT: even simpler!

``````\$ages = array("Peter" => "35", "Ben" => "37", "Joe" => "43", "Rob" => "43");
\$max = max(\$ages);
\$new = array_keys(array_filter(\$ages, function (\$age) use (\$max) { return \$age == \$max; }));
`````` 