代码之家  ›  专栏  ›  技术社区  ›  Tim

使用uksort()对数组进行排序

  •  0
  • Tim  · 技术社区  · 15 年前

    我有一个这样的数组:

    $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);
    }
    

    我需要如何编写函数才能使顺序正确?

    提前感谢您,并致以最诚挚的问候。

    1 回复  |  直到 15 年前
        1
  •  3
  •   leafnode    15 年前

    您可以使用内置的自然比较功能:

    $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
    )