2016-08-03 105 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]; 
}