PHP sorting by date

馋奶兔 提交于 2019-12-11 02:48:47

问题


I have tried to use usort but I am having issues

I have now used the usort function.

my array is has a string key and a string value which represents the date

my output is as follows:

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

It is only sorting by the first two numbers, I want it to sort for the full date, What am I doing wrong?

This is my code:

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/>";
    }

回答1:


Those aren't dates. Those are strings. You need to put your dates into a proper format that is either sortable as strings or compare them as dates using 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/>";
}



回答2:


Convert your dates to integers first:

$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;
}


来源:https://stackoverflow.com/questions/22175837/php-sorting-by-date

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!