2010-10-06 36 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 
)