2011-03-24 60 views
3

見陣列例如:here查找MAX()在PHP

基本上,我想找到最大(),關於陣列[] [「時間」]該陣列英寸我可以弄清楚,如果我循環它,但我希望有一個更優雅的解決方案。

+0

可能重複[從多維數組中的元素獲取最大值?](http://stackoverflow.com/questions/2189479/get-the-maximum-value-from-an-element-in-a多維數組) – 2012-03-17 12:10:19

回答

9

想想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')); 

它更通用和可用於其他類似的東西。

+0

'array_col()'很好! – 2012-06-07 14:52:15

+0

難道你不能使用PHP內建的'array_column'函數而不是'array_col'函數嗎? http://php.net/manual/en/function.array-column.php – 2016-12-24 07:43:01

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"]; 
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 
+0

我不會推薦使用複雜的排序算法來獲取數組中的單個值。實際上,排序只能在真正需要的時候完成。額外的開銷不值得一看「酷炫」的解決方案。 – 2016-10-11 08:11:42