如何将数组中的日期从最旧的php排序为最新的php

如何将数组中的日期从最旧的php排序为最新的php,php,arrays,sorting,date,Php,Arrays,Sorting,Date,我有个问题。 我无法将数组中的日期从最旧到最新排序/ 我的阵列: $arr = array('2013-02-01','2000-02-01','2016-02-17','0000-00-00','0000-00-00','0000-00-00'); 我想要输出 array( [0] => '2000-02-01', [1] => '2013-02-01', [2] => '2016-02-01', [3] => '0000-00-00', [4] => '000

我有个问题。 我无法将数组中的日期从最旧到最新排序/ 我的阵列:

$arr = array('2013-02-01','2000-02-01','2016-02-17','0000-00-00','0000-00-00','0000-00-00');
我想要输出

array(
[0] => '2000-02-01',
[1] => '2013-02-01',
[2] => '2016-02-01',
[3] => '0000-00-00',
[4] => '0000-00-00',
[5] => '0000-00-00',
)
我在usort中使用自己的函数回调,但这不起作用/

function sortDate($a, $b)
{
    if ($a == $b) {
        return 0;
    } elseif($a == '0000-00-00') {
        return 1;
    }

    return strtotime($a) < strtotime($b) ? 1 : -1;
}
函数排序日期($a,$b)
{
如果($a=$b){
返回0;
}elseif($a=='0000-00-00'){
返回1;
}
返回strotime($a)

有人想出了解决方案吗?

首先,我从数组中删除所有零值,然后根据需要对其进行排序,然后再添加零值:

$arr = array('2013-02-01','2000-02-01','2016-02-17','0000-00-00','0000-00-00','0000-00-00');
$count = count($arr);

$arr = array_filter($arr, function($v) {
    if($v == '0000-00-00') {
        return false;
    } else {
        return true;
    }
}, ARRAY_FILTER_USE_BOTH);

$count -= count($arr);

sort($arr);

$arr = array_merge($arr, array_fill(0, $count, '0000-00-00'));

print_r($arr);
这将对数组进行如下排序:

Array
(
    [0] => 2000-02-01
    [1] => 2013-02-01
    [2] => 2016-02-17
    [3] => 0000-00-00
    [4] => 0000-00-00
    [5] => 0000-00-00
)

日期比较倒过来了。你有:

return strtotime($a) < strtotime($b) ? 1 : -1;
返回strotime($a)
你想要:

return strtotime($a) < strtotime($b) ? -1 : 1;
返回strotime($a)
您可以使用:

return $a < $b ? -1 : 1;
返回$a<$b-1 : 1;
最佳排序是:

usort($childs, function ($a, $b) {
            if ($a == '0000-00-00')
                return 1;

            if ($b == '0000-00-00')
                return -1;

            if ($a == $b)
                return 0;

            return ($a < $b) ? -1 : 1;
        });
usort($childs,function($a,$b){
如果($a=='0000-00-00')
返回1;
如果($b=='0000-00-00')
返回-1;
如果($a=$b)
返回0;
回报率($a<$b)?-1:1;
});

这将给出您希望在PHP版本5.3.22-5.6.18中测试的结果,但PHP 7中的一些更改会影响usort函数:

$arr = array('2013-02-01','2000-02-01','2016-02-17','0000-00-00','0000-00-00','0000-00-00');

sort( $arr );
usort( $arr, function( $a, $b )
{
    if ( $a === $b ) return 0;
    if ( strpos( $b, '0000' ) !== false ) return -1;
    return ( $a < $b ) ? -1 : 1;
});
测试:


在这种情况下,如果aI使用函数sort,那么只需简单的
sort
就可以了……但它没有帮助。你可以在phpFIDLE上显示我的代码:@devbochenek我想我得到了它谢谢你指出我的答案是无效的,从这个问题上看不明显。但是你的答案给了我
Array([0]=>0000-00-00[1]=>2000-02-01[2]=>2013-02-01[3]=>0000-00-00[4]=>2016-02-17[5]=>0000-00-00)
结尾谢谢,但这没有帮助:(我有同样的答案,但我想把它修好让它正常工作
Array
(
    [0] => 2000-02-01
    [1] => 2013-02-01
    [2] => 2016-02-17
    [3] => 0000-00-00
    [4] => 0000-00-00
    [5] => 0000-00-00
)