2017-06-16 9 views
2

Ich möchte ein mehrdimensionales Array in alphabetischer Reihenfolge basierend auf dem Schlüssel label sortieren und immer noch den ursprünglichen Schlüssel category. Ich habe versucht, uasort verwenden, aber das scheint nicht den Trick zu tun:Sortierung mehrdimensionalen Array basierend auf dritten Array

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

Kann mir jemand helfen?

Ich habe folgende Array:

$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] => [..] 
    [..] => [..] 
); 

Vielen Dank im Voraus!

+0

Versuchen Sie, 'Bier' gegen' Zweite Kategorie' oder '$ arr ['Bier'] [0]' gegen '$ arr ['Bier'] [1]' zu sortieren? Du 'uasort' macht das erstere. – Bryan

+0

@Bryan Ich weiß, aber das ist nicht was ich will. Ich versuche '$ arr [Bier] [0] [' label '] 'in alphabetischer Reihenfolge zu sortieren. Also der erste ist der '[Wert] => KIT 1', der zweite' [Wert] => 4' etc. – Craetive

+0

Sorry für die späte Antwort, fügte eine Antwort hinzu Ich denke, löst Ihr Problem, wenn Sie immer noch stecken . – Bryan

Antwort

0

Das Problem besteht darin, dass Sie das äußere Array nach dem Wert der Beschriftungen auf den inneren Arrays sortieren, wenn es so aussieht, als wollten Sie die Elemente in jedem Array sortieren. Versuchen Sie, das Array durchzulaufen und zu sortieren, während Sie fortfahren.

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

Beachten Sie, dass ich auch über die Referenz Looping, wenn Sie dies nicht tun, werden die Elemente in dem ursprünglichen Array nicht sortiert werden.

+0

Das scheint den Trick zu tun! Aber ist das der sauberste Weg? Es fühlt sich so seltsam für jedes Array an, nur um die Position neu zu sortieren. – Craetive

+0

Sie können Array Walk oder Map verwenden, wenn Sie denken, dass es sauberer aussieht, aber Sie ordnen die Children Array-Elemente neu, nicht die äußersten Elemente, also muss es sein erledigt. – Bryan

Verwandte Themen