2015-03-25 1 views
0

J'ai des problèmes usort() MAJOR! :(Donc, fondamentalement, je veux trier mon tableau par leurs valeurs.Je voudrais les valeurs à afficher dans cet ordre: Platine, Or, Argent, Bronze, Complet, Aucun, incomplet.Maintenant je peux les trier bien, mais je voudrais pour préserver leur clé (est-ce possible?) voici mon code:.?!Usort sans remplacer les clés PHP

function compareMedals($a, $b) { 
    $aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete'); 
    $aValues = array(1, 2, 3, 4, 5, 6, 7); 
    $a = str_ireplace($aMap, $aValues, $a); 
    $b = str_ireplace($aMap, $aValues, $b); 
    return $a - $b; 
} 
usort($list, 'compareMedals'); 

est-il donc possible de les trier tout en préservant leurs clés Merci :)

EDIT

Tableau:

$array = array("post1" => 'Platinum', "Post2" => "Bronze, "Post3" = > Gold) 

sortie doit:

"Post1" => 'Platinum', 
"Post3" => 'Gold', 
"Post2" => 'Bronze' 

Il est pourtant fournir en sortie ceci:

"0" => 'Platinum', 
"1" => 'Gold', 
"2" => 'Bronze' 
+0

Il serait plus clair si vous avez décrit ce que vous obtenez maintenant (et ensuite la différence par rapport au résultat souhaité). –

Répondre

4

Il suffit d'utiliser uasort intead de usort. Définition de uasort est

Trier un tableau avec une fonction de comparaison définie par l'utilisateur et à maintenir association d'index.

Il est un exemple de code avec votre comparaison de fonction et uasort:

$list = array('post1' => 'Gold', 'post2' => 'None', 'post3' => 'Platinum'); 

function compareMedals($a, $b) { 
    $aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete'); 
    $aValues = array(1, 2, 3, 4, 5, 6, 7); 
    $a = str_ireplace($aMap, $aValues, $a); 
    $b = str_ireplace($aMap, $aValues, $b); 
    return $a - $b; 
} 
uasort($list, 'compareMedals'); 

print_r($list); 

Ce code donne résultat

Array 
(
    [post3] => Platinum 
    [post1] => Gold 
    [post2] => None 
) 
+0

Comment ferais-je cette fonction? –

+0

Si je comprends bien votre question, vous avez juste besoin de remplacer usort par uasort. Vous n'avez pas besoin de changer votre fonction de comparaison ou quoi que ce soit d'autre. J'ai ajouté un exemple de ce que vous obtenez. Avez-vous besoin de ce résultat? – SeriousDron

+0

Il les trie correctement, mais il change les clés juste le numéro de son index. Disons donc que le tableau était array (post1 => 'Gold', post2 => 'None', post3 => 'Platinum') il me donne alors array (2 => Platinum, 0 => Gold, 1 => None) . Il ne garde pas la partie "post" de la clé. –

1

usort n'a pas préserver la clé, si vous souhaitez conserver la clé après tri, vous devez utiliser asort. J'espère que cela vous aidera.