Так у меня есть 2D массив, который выглядит немного как это:Как сортировать по первичному ключу даты и вторичной буквенно-цифровой в PHP
[0] => Array(
[date] => 23-01-2017
[name] => bbb
[othertext] => text2
)
[1] => Array(
[date] => 23-01-2017
[name] => aaa
[othertext] => text3
)
[2] => Array(
[date] => 24-01-2017
[name] => aaa
[othertext] => text1
)
Примечание: Этот вопрос не помечено как MySQL, используется база данных является MongoDB с типом сортировки 'date' => 'asc'
.
В настоящее время это возвращается из моей базы данных, отсортированной по дате, но не учитывает свойство name. Я хотел бы сортировать это по date
, а для записей с той же датой сортировать по name
.
Мой текущий подход заключается в запуске array_multisort
на данных:
array_multisort(
$array['date'], SORT_STRING,
$array['name'], SORT_STRING,
$arrayCopy //<--This copy of the array has the full datetime object
);
Но затем сортирует дату в виде строки, поэтому в некоторых случаях он сортирует его неправильно; например 1st March
будет идти до 2nd Feb
. Если сначала помещать месяц, то снова сортируется неправильно, когда даты Dec/Jan сортируются.
Каков правильный подход к этому вопросу? Я видел упоминание о usort()
, но я не уверен, как его реализовать в этом прецеденте. Имеются ли функции array_multisort
для дат?
Simp ly, добавьте этот вид в свой SQL-запрос 'ORDER BY date ASC, имя ASC' –
http://stackoverflow.com/questions/2910611/php-sort-a-multidimensional-array-by-element-containing-date –
@ Ayaou Этот вопрос не помечен как MySQL, он использует базу данных MongoDB - я расширил вопрос, чтобы указать это. :) – user3420034