4

See array for example: here

Basically, I want to find the max() for array[]['time'] in that array. I can figure it out if I loop through it, but I was hoping there was a more elegant solution.

asked Mar 24, 2011 at 23:46
1

3 Answers 3

10

Think array_reduce if you want to compute some single value iteratively over an array:

$max = array_reduce($array, function($a, $b) { 
 return $a > $b['time'] ? $a : $b['time']; 
} );

Or you could make use of a utility function like:

function array_col(array $a, $x)
{
 return array_map(function($a) use ($x) { return $a[$x]; }, $a);
}

which would be used like:

$max = max(array_col($array, 'time'));

It's more general purpose and could be used for other similar things.

answered Mar 24, 2011 at 23:53
1
1

Sort the array from highest to lowest in terms of []['time'] and get the first value:

function sort_arr($item_1, $item_2)
{
 return $item_2['time'] - $item_1['time'];
}
usort($arr, 'sort_arr');
// $arr[0] is the item with the highest time
answered Mar 24, 2011 at 23:50
1
  • I wouldn't recommend using a complex sort algorithm for something like getting a single value out of an array. Actually, sorting should only be done when really needed. The additional overhead isn't worth a "cool-looking" solution. Commented Oct 11, 2016 at 8:11
0

You could always sort the array and take the first or last value respectively. You can make use of usort to sort your array by providing a custom comparison function to reflect your structure.

Here's a simple example:

$foo[1]["time"] = 2323443;
$foo[2]["time"] = 343435;
$foo[3]["time"] = 13455;
$foo[4]["time"] = 9873634;
$foo[5]["time"] = 82736;
$foo[6]["time"] = 9283;
function cmp($a, $b)
{
 if ($a["time"] == $b["time"]) {
 return 0;
 }
 return ($a["time"] < $b["time"]) 
 ? -1 
 : 1;
}
usort($foo, "cmp");
$max = $foo[count($foo)-1]["time"];
answered Mar 24, 2011 at 23:49

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.