Я пытался использовать usort, но у меня проблемы
Теперь я использовал функцию usort.
мой массив имеет строковый ключ и строковое значение, которое представляет дату
мой результат выглядит следующим образом:
02/09/2013 03/09/2013 03/10/2013 04/07/2013 04/09/2013 09/09/2013 11/09/2013 13/06/2013 13/08/2013
Это только сортировка по первым двум числам, я хочу, чтобы они сортировались для полной даты, что я делаю неправильно?
Это мой код:
usort($filesWithDates,"my_sort"); foreach ($filesWithDates as &$value) { echo $value."<br/>"; } function my_sort($a,$b) { if ($a==$b) return 0; return ($a<$b)?-1:1; } foreach ($filesWithDates as &$value) { echo $value."<br/>"; }
Это не даты. Это строки . Вам нужно указать даты в правильном формате, который можно сортировать как строки или сравнивать с датами с помощью DateTime()
:
usort($filesWithDates, function($a, $b) { $date1 = DateTime::createFromFormat('d/m/Y', $a); $date2 = DateTime::createFromFormat('d/m/Y', $b); return $date1 > $date2; }); foreach ($filesWithDates as $value) { echo $value."<br/>"; }
Сначала конвертируйте даты в целые числа:
$datesAsInts = array(); foreach($filesWithDats as $value) { $datesAsInts[] = strtotime($value); } usort($datesAsInts,"my_sort"); foreach ($datesAsInts as $value) { echo date('d/m/Y', $value)."<br/>"; } function my_sort($a,$b) { if ($a==$b) return 0; return ($a<$b)?-1:1; }