Как отсортировать массив даты в 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
, но не работаю.
Ответы
Ответ 1
Поскольку элементы массива являются строками, вам необходимо преобразовать их на дату и затем сравнить с сортировкой. 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);
Проверьте результат в демо
Ответ 2
использовать функцию времени использования для генерации 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
Ответ 3
Попробуйте это,
<?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 );
?>
Будет сортировать даты в желаемом порядке.
Ответ 4
Попробуйте код ниже:
<?php
$array = array('11-01-2012','01-01-2011','09-02-2013','01-01-2014','01-01-2015');
function cmp($a, $b)
{
$a = date('Y-m-d', strtotime($a));
$b = date('Y-m-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>";
}
?>
Ответ 5
используйте 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"
}
}