2016-08-03 104 views
0

我需要解決一個函數來檢索條件中的最高數組集合,主要問題是驗證數組中存在多於1個真值並始終需要最高的價值。如何從多維數組中檢索數組的最高值

我的情況:

 $purchase = 999; 
     $rules = array(
      array(
       'id' => 1, 
       'min' => 200, 
      ), 
      array(
       'id' => 2, 
       'min' => 300, 
      ), 
      array(
       'id' => 5, 
       'min' => 50, 
      ), 
      array(
       'id' => 3, 
       'min' => 2000, 
      ) 
     ); 
     $getRules = array(); 
     foreach($rules as $rule){ 
      if($purchase >= $rule['min']){ 
       $getRules[] = $rule; 
      } 
     } 
     var_dump($getRules); 

在這種情況下我會得到3臺陣列:

array(3) { 
    [0]=> 
    array(2) { 
    ["id"]=> 
    int(1) 
    ["min"]=> 
    int(200) 
    } 
    [1]=> 
    array(2) { 
    ["id"]=> 
    int(2) 
    ["min"]=> 
    int(300) 
    } 
    [2]=> 
    array(2) { 
    ["id"]=> 
    int(5) 
    ["min"]=> 
    int(50) 
    } 
} 

從這3套我需要得到具有「分」鍵設定最高的價值,我的意思是我需要陣列關鍵數字1.

我試圖排序與usort,但在多維它不排序正確,所以如果有人通過槽這一點,並有一個解決方案,我真的appre ciate!

回答

0

您可以添加額外的if語句來檢查規則是否大於先前的規則。

foreach($rules as $rule){ 
     if($purchase >= $rule['min']){ 
      $getRules[] = $rule; 
      if(!isset($highestRule['min']) || $highestRule['min'] < $rule['min'])){ 
       $highestRule = $rule; 
      } 
     } 
    } 
0

此功能將您的數組作爲參數,遍歷它,並保持替換$highest_min$highest_min_index如果當前分鐘是比以前更大。

最後,它將有您的數組的索引,其中最高的最小值駐留,並將只返回您的數組中的索引,爲您提供最高分鐘的數組。

function get_highest_min_array($in_array){ 

    $out_array = array(); 
    $highest_min_index = ''; 
    $highest_min = 0; 

    foreach($in_array as $index => $out_array){ 

    if($out_array['min'] > $highest_min){ 
     $highest_min_index = $index; 
     $highest_min = $out_array['min']; 
    } 
    } 
    return $in_array[$highest_min_index]; 
}