2017-12-25 8 views
1

以下のような配列がありますが、潜在的により多くの草案が含まれている可能性があります。 alloc_coeffsteps_count多次元配列を2つの変数でソート

$multi_arr = array(
    'draft1' => array (
     'alloc_coeff' => 560, 
     'steps_count' => 2, 
     'order_draft' => array(
      '0' => array(
       'whse_id' => 4, 
       'quantity' => 0, 
       'percent' => 0 
      ), 
      '1' => array(
       'whse_id' => 1, 
       'quantity' => 10, 
       'percent' => 66.666666666667 
      )   
     ) 
    ), 
    'draft2' => array (
     'alloc_coeff' => 1517, 
     'steps_count' => 1, 
     'order_draft' => array(
      '0' => array(
       'whse_id' => 1, 
       'quantity' => 10, 
       'percent' => 66.666666666667 
      )  
     ) 
    ), 
    'draft3' => array (
     'alloc_coeff' => 559, 
     'steps_count' => 2, 
     'order_draft' => array(
      '0' => array(
       'whse_id' => 2, 
       'quantity' => 0, 
       'percent' => 0 
      ), 
      '1' => array(
       'whse_id' => 1, 
       'quantity' => 10, 
       'percent' => 66.666666666667 
      )   
     ) 
    ) 
); 

は、私は2つの変数を使用してコンテンツをソートする必要があります。

最初のalloc_coeffは、最高値から最低値まで考慮する必要があります。

そして、第2の変数として、steps_countが最低値から最高値に変わります。

usort($multi_arr, function($a, $b) { 
    return $a['alloc_coeff'] <=> $b['alloc_coeff']; 
}); 

私が書き換えられ、一時変数に格納する配列全体を必要としない、私はちょうどこの(予想結果)のようにソートされたキーdraft2draft1最後にdraft3を必要としています。

これを達成する方法は何ですか?

答えて

1

あなたは以下のようにそれを行うことができます: -

array_multisort(array_column($multi_arr, 'alloc_coeff'), SORT_DESC, 
       array_column($multi_arr, 'steps_count'), SORT_ASC, 
       $multi_arr); 

出力: - https://eval.in/924894https://eval.in/924892

注: - 5.6.23とPHP 7.0.8

+0

うわーでテスト!それはとても簡単です!ありがとう。 – Borsn

+1

@Borsnあなたを助けてうれしい:) :) –

関連する問題