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.
-
possible duplicate of Get the maximum value from an element in a multidimensional array?John Carter– John Carter2012年03月17日 12:10:19 +00:00Commented Mar 17, 2012 at 12:10
3 Answers 3
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.
-
Couldn't you use PHP's built in
array_column
function instead of yourarray_col
function? php.net/manual/en/function.array-column.phpEthan– Ethan2016年12月24日 07:43:01 +00:00Commented Dec 24, 2016 at 7:43
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
-
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.Marcello Mönkemeyer– Marcello Mönkemeyer2016年10月11日 08:11:42 +00:00Commented Oct 11, 2016 at 8:11
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"];
Explore related questions
See similar questions with these tags.