php - сортировать массив с датой в качестве ключа - PullRequest
8 голосов
/ 21 августа 2011

Привет, у меня есть массив с ключами в качестве даты в этом формате.

$arr = array(

    "20110805" => "2",
    "20100703" => "5",
    "20110413" => "3",
    "20100805" => "4",
    "20100728" => "6",
    "20090416" => "7",
    "20080424" => "8",
    "20110819" => "1",  
);

как мне отсортировать этот массив по ключу. Спасибо.

Ответы [ 3 ]

23 голосов
/ 21 августа 2011

С датами в этом формате сравнение по алфавиту будет работать очень хорошо.Используйте функцию PHP ksort .

ksort($arr);
4 голосов
/ 21 августа 2011

Только эта единственная строка кода:

ksort($arr);
1 голос
/ 21 марта 2019

Несколько более сложное решение, которое, тем не менее, работает практически для любого формата даты , основано на функции uksort .

Сначала мы определим функция обратного вызова , которая сравнивает две даты (компаратор):

function compare_date_keys($dt1, $dt2) {
    $tm1 = strtotime($dt1);
    $tm2 = strtotime($dt2);
    return ($tm1 < $tm2) ? -1 : (($tm1 > $tm2) ? 1 : 0);
}

Теперь мы можем использовать только что определенную функцию в качестве второго параметра в uksort, как в примере ниже:

uksort($arr, "compare_date_keys");

В результате функция будет обрабатывать ключ как дату и сортировать массив в порядке возрастания (сначала не так давно).

Обратите внимание, что мы можем легко настроить компаратор для поддержки различных вариантов использования.Например, сортировка по убыванию даты (сначала самая последняя) может быть выполнена путем простой замены выражения возврата функции следующим:

return ($tm1 < $tm2) ? 1 : (($tm1 > $tm2) ? -1 : 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...