Как отсортировать массив даты в PHP

У меня есть массив в этом формате:

Array ( [0] => Array ( [28th February, 2009] => 'bla' ) [1] => Array ( [19th March, 2009] => 'bla' ) [2] => Array ( [5th April, 2009] => 'bla' ) [3] => Array ( [19th April, 2009] => 'bla' ) [4] => Array ( [2nd May, 2009] => 'bla' ) ) 

Я хочу отсортировать их в порядке возрастания дат (в зависимости от месяца, дня и года). Каков наилучший способ сделать это?

Первоначально электронные письма выбираются в формате даты MySQL, поэтому для меня можно получить массив в этом состоянии:

 Array [ ['2008-02-28']='some text', ['2008-03-06']='some text' ] 

Возможно, когда он будет в этом формате, я могу пропустить их, удалить все метки '-' (дефис), чтобы они оставались целыми, сортировать их с помощью array_sort() и снова array_sort() их, чтобы отсортировать их? Предпочитаю, если бы был другой способ, поскольку я бы делал 3 цикла с этим для каждого пользователя.

Благодарю.

Изменить: я мог бы также сделать это:

 $array[$index]=array('human'=>'28 Feb, 2009', 'db'=>'20080228', 'description'=>'Some text here'); 

Но используя это, можно ли каким-либо образом отсортировать массив на основе элемента 'db'?

Изменить 2: Обновлен начальный файл var_dump

Используйте формат ISO ( yyyy-mm-dd ), а не формат «english», а затем просто используйте функцию ksort чтобы получить их в правильном порядке.

Нет необходимости удалять дефисы, ksort будет выполнять буквенно-цифровое сравнение строковых ключей, а формат yyyy-mm-dd отлично работает, поскольку лексический порядок совпадает с фактическим порядком даты.

EDIT. Я вижу, что теперь вы исправили свой вопрос, чтобы показать, что на самом деле у вас массив массивов, и что ключ сортировки находится в поддиапазонах. В этом случае вы должны использовать uksort как рекомендовано в других местах, но я бы рекомендовал вам перейти со своим собственным редактированием и сортировкой на основе даты форматирования в БД, а не путем разбора понятного для человека формата:

 function cmp($a, $b) { global $array; return strcmp($array[$a]['db'], $array[$b]['db']); } uksort($array, 'cmp'); 

Собственно, используйте это:

 usort($array, "cmp"); function cmp($a, $b){ return strcmp($b['db'], $a['db']); } 

🙂

 function cmp($a, $b) { global $array; return strcmp($array[$a]['db'], $array[$b]['db']); } uksort($array, 'cmp'); 

Я думаю, что лучше использовать usort() вместо uksort() , потому что иногда вы не можете использовать глобальные переменные вообще и, в любом случае, используя глобальные переменные, тоже не является хорошей практикой.

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

 // Sort in chronological order. usort($array, function($a, $b) { return strcmp($a['db'], $b['db']); });