2016-07-19 8 views
-1

Ich versuche, das folgende Array nach PunktenSortieren mehrdimensionalen assoziatives Array in PHP

$questionsets = array(
    "A" => array("category" => "Some Category A", "score" => 0), 
    "B" => array("category" => "Some Category B", "score" => 29), 
    "C" => array("category" => "Some Category C", "score" => 12), 
    "D" => array("category" => "Some Category D", "score" => 88), 
    "E" => array("category" => "Some Category E", "score" => 4), 
    "F" => array("category" => "Some Category F", "score" => 22), 
    "G" => array("category" => "Some Category G", "score" => 20), 
    "H" => array("category" => "Some Category H", "score" => 40), 
    "I" => array("category" => "Some Category I", "score" => 42) 
); 

$questionsets = array_msort($questionsets, array('score'=>SORT_DESC)); 

Dies funktioniert nicht, zu sortieren, und ich bin keine Dokumentation oder Beispiele zu finden, die helfen. Ich habe versucht mit array_multisort() und usort(), aber ohne Erfolg.

Was ist die saubere Möglichkeit, dieses Array nach score in absteigender Reihenfolge zu sortieren?

Antwort

4

Sie müssen keine Mehrfachsortierung verwenden, wenn Sie nur an einer Dimension interessiert sind. Tun Sie dies stattdessen in sortieren, um die Partitur absteigend:

usort($questionsets,function($a,$b){return $b['score']-$a['score'];}); 

Live demo

+0

Das funktioniert perfekt und es macht Sinn für mich auch. Vielen Dank. – rwkiii

+0

Ich habe gerade entdeckt, dass die ersten Dimensionen "A", "B" usw. jetzt numerisch erscheinen - [0], [1] usw. Gibt es eine Möglichkeit, die Buchstaben zu behalten? Dies sind die wichtigsten Schlüssel. – rwkiii

+0

Für alle anderen, die das Problem haben, den Array-Indexschlüssel beizubehalten, verwenden Sie stattdessen "uasort". – rwkiii