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.

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Couldn't you use PHP's built in array_column function instead of your array_col function? php.net/manual/en/function.array-column.php
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

1 Comment

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.
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"];

Comments

Your Answer

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.