2011-02-23 56 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