在php中查找特定多维数组值的max()

时间:2011-03-24 23:46:39

标签: php arrays multidimensional-array max

请参阅数组,例如:here

基本上,我想在该数组中找到array [] ['time']的max()。如果我循环使用它,我可以弄明白,但我希望有一个更优雅的解决方案。

3 个答案:

答案 0 :(得分:10)

如果要在数组上迭代计算单个值,请考虑array_reduce

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

或者您可以使用以下实用程序功能:

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

将使用如下:

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

它更通用,可以用于其他类似的事情。

答案 1 :(得分:1)

根据[]['time']将数组从最高到最低排序并获得第一个值:

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

答案 2 :(得分:0)

您始终可以对数组进行排序,并分别获取第一个或最后一个值。您可以使用usort对数组进行排序,方法是提供自定义比较函数以反映您的结构。

这是一个简单的例子:

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