Я новичок в 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 ); ?>
Будет сортировать даты в том порядке, в котором вы хотите.