2016-08-03 7 views
0

条件の中で最も高い配列を検索する関数を解決する必要がありますが、主な問題は配列が2つ以上あることを確認することです常に最高値にする必要があります。配列内の最大値で配列を取得する方法

私の場合:i 'は分' キーaを有するセットを取得する必要があり、この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) 
    } 
} 

:このシナリオでは

 $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セットを取得します最高値、私は配列のキー番号1が必要だということを意味します。

私はusortでソートしようとしましたが、多次元であるので、誰かがこれを通過して解決策を持っていると正しくソートしません。ケイト!

答えて

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]; 
} 
関連する問題