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

Я новичок в php, у меня есть php date array

[0] => 11-01-2012 [1] => 01-01-2014 [2] => 01-01-2015 [3] => 09-02-2013 [4] => 01-01-2013 

Я хочу сортировать его так:

 [0] => 11-01-2012 [1] => 01-01-2013 [2] => 09-02-2013 [3] => 01-01-2014 [4] => 01-01-2015 

Я использую asort но не работаю.

Поскольку элементы массива являются строками, вам необходимо преобразовать их на дату и затем сравнить с сортировкой. usort() сортировки usort() с использованием пользовательской функции, которая является хорошей функцией сортировки для этого случая.

 $arr = array('11-01-2012', '01-01-2014', '01-01-2015', '09-02-2013', '01-01-2013'); function date_sort($a, $b) { return strtotime($a) - strtotime($b); } usort($arr, "date_sort"); print_r($arr); 

Проверить результат в демоверсии

Попробуйте под кодом:

 <?php $array[0] = '11-01-2012'; $array[1] = '01-01-2011'; $array[2] = '09-02-2013'; $array[3] = '01-01-2014'; $array[4] = '01-01-2015'; function cmp($a, $b) { $a = date('Ym-d', strtotime($a)); $b = date('Ym-d', strtotime($b)); if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } usort($array, "cmp"); foreach ($array as $key => $value) { echo "[$key]=> $value <br>"; } ?> 

вне времени использовать функцию времени для генерации ts и сортировки

 <?php $out = array(); // $your_array is the example obove foreach($your_array as $time) { $out[strtotime($time)] = $time; } // now $out has ts-keys and you can handle it ... ?> 

ksort

используйте DateTime для сортировки:

 $a = array( new DateTime('2016-01-02'), new DateTime('2016-05-01'), new DateTime('2015-01-01'), new DateTime('2016-01-01') ); asort($a); var_dump($a); 

Результатом будет:

 array(4) { [2]=> object(DateTime)#3 (3) { ["date"]=> string(26) "2015-01-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "US/Pacific" } [3]=> object(DateTime)#4 (3) { ["date"]=> string(26) "2016-01-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "US/Pacific" } [0]=> object(DateTime)#1 (3) { ["date"]=> string(26) "2016-01-02 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "US/Pacific" } [1]=> object(DateTime)#2 (3) { ["date"]=> string(26) "2016-05-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "US/Pacific" } } 

Попробуй это,

 <?php $array = [ '11-01-2012', '01-01-2014', '01-01-2015', '09-02-2013', '01-01-2013' ]; function sortFunction( $a, $b ) { return strtotime($a) - strtotime($b); } usort($array, "sortFunction"); var_dump( $array ); ?> 

Будет сортировать даты в том порядке, в котором вы хотите.