2017-06-16 78 views
2

我想根據label鍵按字母順序對多維數組排序,並仍然保留原始的category鍵。我一直在使用uasort嘗試,但似乎沒有這樣的伎倆:基於第三個數組的排序多維數組

uasort($array, function($a, $b) { 
    return $a[0]['label'] <=> $b[0]['label']; 
}); 

有人可以幫我嗎?

我有以下陣列:

$array = Array 
(
    [Bier] => Array 
    (
     [0] => Array 
      (
       [value] => KIT 1 
       [label] => Amstel Tray 12 x 50cl 
       [picture] => amstel-tray-24-0_5.jpg 
      ) 
      [1] => Array 
      (
       [value] => 2 
       [label] => Heineken Krat 24 x 30cl 
       [picture] => heineken-krat-24-flesjes.jpg 
      ) 
      [2] => Array 
      (
       [value] => 4 
       [label] => Amstel Tray 24 x 50cl 
       [picture] => amstel-tray-24-0_5.jpg 
      ) 

     ) 
    ) 
    [Second Category] => [..] 
    [Third Category] => [..] 
    [..] => [..] 
); 

提前感謝!

+0

你試圖按照'$ arr ['Bier'] [1]''對''第二類別'或'$ arr ['Bier'] [0]''Bier'進行排序嗎?你'uasort'做前者。 – Bryan

+0

@Bryan我知道,但那不是我想要的。我試圖按字母順序排序'$ arr [Bier] [0] ['label']'。所以第一個將是'[value] => KIT 1',第二個'[value] => 4'等。 – Craetive

+0

對不起,對於遲到的回覆,我認爲解決了問題,如果你仍然卡住。 – Bryan

回答

0

問題是你正在按內部數組上的標籤值對外部數組進行排序,看起來你真正想要的是對每個數組中的項進行排序。嘗試循環訪問數組並按照順序排序。

foreach($array as &$arr) { 
    uasort($arr, function($a, $b) { 
     return $a['label'] <=> $b['label']; 
    }); 
} 

請注意,如果您不這樣做,原始數組中的項目將不會被排序。

+0

這似乎是做的伎倆!但這是最乾淨的方式嗎?對於每個數組,只有重新排序 – Craetive

+0

纔會感到奇怪。如果您認爲它看起來更乾淨,您可以使用數組散步或映射,但是您將重新排序子項數組項,而不是最外層項,所以它需要完成。 – Bryan