2010-10-06 69 views
0

我有这样一个数组的数组:排序与uksort()

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

我想对它进行排序,我将有以下顺序:

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

所以我需要一个在前两个字符中按字母顺序排列的顺序以及其余的数字。因此,我认为我有

uksort($a, "cmp"); 

要做到这一点,所以我需要这样的功能:

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

如何我需要写的功能,使订货会吧?

谢谢你提前&最好的问候。

回答

3

您可以使用内置的天然对比功能:

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

上面的代码会产生以下输出:

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