Сортировка массива с помощью uksort () - PullRequest
0 голосов
/ 06 октября 2010

У меня есть такой массив:

$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 Ответ

3 голосов
/ 06 октября 2010

Вы можете использовать встроенную функцию естественного сравнения:

$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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...