2010-10-06 3 views
0

J'ai un tableau comme celui-ci:Tri d'un tableau avec uksort()

$a = array("MA1" => 0, "MA10" => 1, "MA20" => 2, "MA5" => 3, "SM10" => 4, "SM8" => 5, "SM20" => 6, "SN33" => 7); 

Je veux faire le tri, que je vais avoir l'ordre suivant:

$a = array("MA1" => 0, "MA5" => 3, "MA10" => 1, "MA20" => 2, "SM8" => 5, "SM10" => 4, "SM20" => 6, "SN33" => 7); 

Je besoin d'un ordre qui est alphabétique dans les deux premiers caractères et numérique du reste. Je pense que je dois le faire avec

uksort($a, "cmp"); 

donc je besoin d'une fonction comme ceci:

function cmp($a, $b) { 
    // ??? 
    return strcasecmp($a, $b); 
} 

Comment puis-je besoin d'écrire la fonction afin que l'ordre sera juste?

Merci d'avance & Cordialement.

Répondre

3

Vous pouvez utiliser la fonction de comparaison naturelle intégrée:

$a = array("MA1" => 0, "MA10" => 1, "MA20" => 2, "MA5" => 3, "SM10" => 4, "SM8" => 5, "SM20" => 6, "SN33" => 7); 
uksort($a, "strnatcasecmp"); 
print_r($a); 

Le code ci-dessus se produire une sortie suivante:

Array 
(
    [MA1] => 0 
    [MA5] => 3 
    [MA10] => 1 
    [MA20] => 2 
    [SM8] => 5 
    [SM10] => 4 
    [SM20] => 6 
    [SN33] => 7 
)