2011-02-23 49 views
9

有没有简单的方法可以获得关联数组的最高数值?关联数组的最高值

$array = array(
    0 => array(
     'key1' => '123', 
     'key2' => 'values we', 
     'key3' => 'do not', 
     'key4' => 'care about' 
    ), 
    1 => array(
     'key1' => '124', 
     'key2' => 'values we', 
     'key3' => 'do not', 
     'key4' => 'care about' 
    ), 
    2 => array(
     'key1' => '125', 
     'key2' => 'values we', 
     'key3' => 'do not', 
     'key4' => 'care about' 
    ) 
); 

AwesomeFunction($array, 'key1'); // returns 2 ($array key) 

请善待,因为这个问题是用手机写的。谢谢。

回答

12

如果您知道您的数据将始终采用该格式,则应如此操作。

function getMax($array) 
{ 
    $max = 0; 
    foreach($array as $k => $v) 
    { 
     $max = max(array($max, $v['key1'])); 
    } 
    return $max; 
} 
+2

您必须稍微修改它才能接受第二个变量并返回数组键,而不是最大值。 – jeroen 2011-02-23 15:56:50

+0

+1这应该很好。你甚至可以传入''key1''作为参数,使它更具动态性。 – 2011-02-23 15:57:05

1

@ithcy - 扩展,将与任何大小的数组工作

function getMax($array) { 
    if (is_array($array)) { 
     $max = false; 
     foreach($array as $val) { 
      if (is_array($val)) $val = getMax($val); 
      if (($max===false || $val>$max) && is_numeric($val)) $max = $val; 
     } 
    } else return is_numeric($array)?$array:false; 
    return $max; 
} 

我觉得

11

PHP 5.5引入了array_column()(当有未发现的数值返回false),这使这更简单:

echo max(array_column($array, 'key1')); 

Demo

0

这一个灵感来自ithcy的例子,但你可以设置查找的关键。 此外,它还会返回最小值和最大值。

function getArrayLimits($array, $key) { 
    $max = -PHP_INT_MAX; 
    $min = PHP_INT_MAX; 
    foreach($array as $k => $v) { 
     $max = max($max, $v[$key]); 
     $min = min($min, $v[$key]); 
    } 
    return Array('min'=>$min,'max'=>$max); 
} 
+0

为什么使用循环,而不是使用内置的PHP函数呢? – 2018-02-07 14:16:55