Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带日期的订单数组_Php - Fatal编程技术网

Php 带日期的订单数组

Php 带日期的订单数组,php,Php,我有一个数组,它的值如下 04|2012 05|2011 05|2011 06|2011 08|2011 事实上,这些都是日期。问题是我不知道如何按降序排序如果只需要使用数组中的这两个项进行排序,可以将年份和天数连接到一个一维整数数组中的单个项中,并具有如下特性: 201204 201105 201105 201106 201108 在这种排序之后,它就像一个ussual一维数组,但按降序排列。假设该格式表示月|年,并且您正在运行PHP5.3+: usort($array, function

我有一个数组,它的值如下

04|2012
05|2011
05|2011
06|2011
08|2011

事实上,这些都是日期。问题是我不知道如何按降序排序如果只需要使用数组中的这两个项进行排序,可以将年份和天数连接到一个一维整数数组中的单个项中,并具有如下特性:

201204
201105
201105
201106
201108

在这种排序之后,它就像一个ussual一维数组,但按降序排列。

假设该格式表示月|年,并且您正在运行PHP5.3+:

usort($array, function ($a, $b) {
    $toTime = function ($str) {
        list($month, $year) = explode('|', $str);
        return mktime(0, 0, 0, $month, 1, $year);
    }

    $a = $toTime($a);
    $b = $toTime($b);

    if ($a == $b) {
        return 0;
    }
    return $a < $b ? -1 : 1;
});
usort($array,function($a,$b){
$toTime=函数($str){
列表($month,$year)=分解(“|”,$str);
返回mktime(0,0,0,$month,1,$year);
}
$a=$toTime($a);
$b=$toTime($b);
如果($a=$b){
返回0;
}
返回$a<$b?-1:1;
});

如果使用类似SQL的日期格式(yyyy-mm-dd),则可以将日期直接作为字符串按任意顺序排序

如果日期格式无法更改:

<?php

$a = array(
    '04|2012',
    '05|2011',
    '05|2011',
    '06|2011',
    '08|2011',
);


function compare_strange_dates($date1, $date2) {
    return strcmp(
        implode('-', array_reverse(explode('|', $date1))),
        implode('-', array_reverse(explode('|', $date2)))
    );
}

usort($a, 'compare_strange_dates'); // ascending
$d = array_reverse($a); // descending

var_dump($a);
var_dump($d);

使用
$dates
作为数组,您可以执行()

另一种不需要转换为日期并且应该更快的方法是()

两种输出

Array
(
    [0] => 04|2012
    [1] => 08|2011
    [2] => 06|2011
    [3] => 05|2011
    [4] => 05|2011
)

注意:由于lambdas,所有这些都需要PHP5.3+。

这是您的数组键值吗???
usort($dates, function($a, $b) {
    return preg_replace('#(\d{2})\|(\d{4})#', '$2$1', $b)
         - preg_replace('#(\d{2})\|(\d{4})#', '$2$1', $a);
});
print_r($dates);
Array
(
    [0] => 04|2012
    [1] => 08|2011
    [2] => 06|2011
    [3] => 05|2011
    [4] => 05|2011
)