Можно ли отсортировать массив со специальным форматом даты для ключа?
Я вытаскиваю список записей из базы данных MySql и записываю данные
$sql = ' SELECT people.*
DATE_FORMAT(people.started_at, ' . $dateformat . ') AS start_date,
//etc.
Это формат даты, который может изменяться в зависимости от параметров, которые пользователь устанавливает:
$dateformat = "'%W, %b %d %y'";
Как только я вернусь к записи, я затем организую и группирую их на основе даты начала, с помощью этой функции:
private function groupDataByKey ( $data, $key ) {
$groups = [];
foreach ($data as $item) {
$date = $item[ $key ];
if (!isset( $groups[ $date ] )) {
$groups[ $date ] = [];
}
array_push( $groups[ $date ], $item );
}
return $groups;
}
Группировка массива с помощью start_date:
$groups = $this->groupDataByKey( $people, 'start_date' );
Что дает мне этот формат:
["Sunday, Aug 05 18"]=>{//array data},
["Sunday, Jul 08 18"]=>{//array data},
["Friday, Aug 04 18"]=>{//array data},
["Monday, Jul 16 18"]=>{//array data}
//etc
Это здорово, но Даты не в порядке.
Причина, по которой я подробно рассказывал о том, как я получаю данные, - это то, что вы можете видеть, есть ли возможность делать то, что я хочу на этом пути.
Есть ли способ отсортировать массив на основе ключа даты?
Я пробовал ksort($groups)
, но он заказывает их в алфавитном порядке в День недели.
Если вы отсортируете сам запрос, то, как вы группируете элементы, следует хранить их по дате.
SELECT people.*
DATE_FORMAT(people.started_at, ' . $dateformat . ') AS start_date
...
ORDER BY people.started_at;
В противном случае вы можете использовать uksort для предоставления вашей собственной функции для сортировки групп.
uksort($groups, function($a, $b) {
return strtotime($a) - strtotime(b);
});