2017-09-02 150 views
1

我有這樣的陣列排序多維數組由兩個值

Array 
(
    [arr1] => Array 
     (
      [0] => Array 
       (     
        [m] => name1 
        [p] => 261.15 
        [f] => 0.30112588 
       ) 

      [1] => Array 
       (    
        [m] => name2 
        [p] => 214.92 
        [f] => 0.35793662 
       ) 

      [2] => Array 
       (
        [m] => name3 
        [p] => 504.35 
        [f] => 0.35779595 
       ) 

      [3] => Array 
       (
        [m] => name3 
        [p] => 504.35 
        [f] => 0.31910875 
       ) 

      [4] => Array 
       (
        [m] => name3 
        [p] => 504.35 
        [f] => 0.38972548 
       ) 

      [5] => Array 
       (
        [m] => name4 
        [p] => 5500 
        [f] => 0.50674623 
       ) 

      [6] => Array 
       (
        [m] => name5 
        [p] => 600.5 
        [f] => 0.11483321 
       ) 
     ) 
) 

我想這樣用higest [「P」]項在上面進行排序數組,但我也想,如果一些項目具有相同的[」 m']和相同['p']的項目與['f']最低的項目相同[[m']和['p'])。

我設法用['p']使用usort函數對這個數組進行排序,但是如果它們具有相同的['m']和['p'],我不能用['f']對它進行排序。

陣列應該是這樣排序後:https://paste.ofcode.org/33h64HtgTsFsT3vWaLHp2Kb

代碼:

$arr = array(); 
$arr['arr1'] = array(); 

array_push($arr['arr1'], ['m' => 'name1', 'p' => 261.15 ,'f' => 0.30112588]); 
array_push($arr['arr1'], ['m' => 'name2', 'p' => 214.92 ,'f' => 0.35793662]); 
array_push($arr['arr1'], ['m' => 'name3', 'p' => 504.35 ,'f' => 0.35779595]); 
array_push($arr['arr1'], ['m' => 'name3', 'p' => 504.35 ,'f' => 0.31910875]); 
array_push($arr['arr1'], ['m' => 'name3', 'p' => 504.35 ,'f' => 0.38972548]); 
array_push($arr['arr1'], ['m' => 'name4', 'p' => 5500 ,'f' => 0.50674623]); 
array_push($arr['arr1'], ['m' => 'name5', 'p' => 600.5 ,'f' => 0.11483321]); 
+1

您可以發佈您當前的代碼? – Philipp

+1

你可以請你發佈你的代碼,最好是與數組?它會給我們一個簡單的出發點來回答你的問題。現在我們所有的都是數組的輸出。 –

+1

使用[array_multisort](http://php.net/manual/fr/function.array-multisort.php) - 看看鏈接底部的用戶「cagret」和「jimpoz」的例子 – Benfarhat

回答

1

隨着usort功能:

條件清單:

  • 排序這個數組,以便項目與higest ['p']頂部

  • 的項目與最低['f']是與同['m']['p']項目中頂部


// $arr is your array 
usort($arr, function($a,$b){ 
    if ($a['m'] == $b['m'] && $a['p'] == $b['p']) { 
     return ($a['f'] > $b['f'])? 1 : -1; 
    } 
    return ($b['p'] > $a['p'])? 1 : -1; 
}); 

print_r($arr); 

輸出:

Array 
(
    [0] => Array 
     (
      [m] => name4 
      [p] => 5500 
      [f] => 0.50674623 
     ) 

    [1] => Array 
     (
      [m] => name3 
      [p] => 504.35 
      [f] => 0.31910875 
     ) 

    [2] => Array 
     (
      [m] => name3 
      [p] => 504.35 
      [f] => 0.35779595 
     ) 

    [3] => Array 
     (
      [m] => name3 
      [p] => 504.35 
      [f] => 0.38972548 
     ) 

    [4] => Array 
     (
      [m] => name5 
      [p] => 500.5 
      [f] => 0.11483321 
     ) 

    [5] => Array 
     (
      [m] => name1 
      [p] => 261.15 
      [f] => 0.30112588 
     ) 

    [6] => Array 
     (
      [m] => name2 
      [p] => 214.92 
      [f] => 0.35793662 
     ) 
) 
+0

好的。我想你必須用usr函數中的$ arr ['arr1']替換$ arr。否則它看起來很好。我會試試看。 – MHH