如何通过内部数组的最高值从多维中检索数组

时间:2016-08-03 17:42:53

标签: php arrays multidimensional-array

我需要解决一个函数来检索一个条件中最高的数组,主要问题是验证一个数组有多于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套我需要得到具有' min'键入最高值,我的意思是我需要数组键号1。

我尝试用usort排序,但是在多维度上它并没有正确排序所以如果有人通过了这个并且有一个解决方案我真的很感激!

2 个答案:

答案 0 :(得分:0)

您可以添加一个额外的if语句来检查规则是否大于先前的规则。

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

答案 1 :(得分:0)

此函数将您的数组作为参数,迭代它并在当前min大于前一个时继续替换$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];
}