2017-06-16 102 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