基于日期在PHP中对多维数组进行排序

时间:2015-02-10 07:11:36

标签: php arrays sorting multidimensional-array

我有一个看起来像这样的数组:

  Array
(
    [0] => Array
        (
            [id] => 4
            [date] => 15.12.2014
            [archived] => 0
        )

    [1] => Array
        (
            [id] => 3
            [date] => 19.12.2014
            [archived] => 0
        )

    [2] => Array
        (
            [id] => 6
            [date] => 15.11.2014
            [archived] => 0
        )
)

我想要做的是根据第二维中的日期值在第一维中将项排序为从高到低的顺序。我可以在[date]字段上使用strtotime()并生成一个unix时间戳(请注意,这些日期是澳大利亚格式而不是US。服务器生成正确的时间戳)。

我知道我可以使用arsort()来安排这个数组,但是我不确定如何根据第二个维数组键的值来完成它。

我需要这个数组看起来像这样:

  Array
(

    [0] => Array
        (
            [id] => 3
            [date] => 19.12.2014
            [archived] => 0
        )
    [1] => Array
        (
            [id] => 4
            [date] => 15.12.2014
            [archived] => 0
        )
    [2] => Array
        (
            [id] => 6
            [date] => 15.11.2014
            [archived] => 0
        )
)

如何在PHP中实现这一目标?

我尝试过以下各种安排无济于事:

arsort($items, strtotime(['date']))

2 个答案:

答案 0 :(得分:1)

您应该使用usort

在你的情况下:

usort($items, function($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
});

答案 1 :(得分:0)

假设您的$数组以这样的方式声明:

$my_array = array(
              array(
                'id'=>4,
                'date'=>'19.12.2014',
                'archived'=>0),
              array(
                 'id'=>3,
                 'date'=>'15.12.2014',
                 'archived'=>0),
              array(
                 'id'=>6,
                 'date'=>'15.11.2014',
                 'archived'=>0));

您可以使用usort函数和闭包函数,如下所示

usort($my_array, function($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
});

usort将对数组进行“就地”排序,意味着不会返回任何数组副本,但会对原始数组进行排序。
此外,我使用strtotime在日期之间进行排序,因为开始日期表示为字符串而不是“实际日期”格式。

另外请记住

  

注意:此函数为数组中的元素指定新键。它将删除可能已分配的任何现有密钥,而不是   只需重新排序密钥。

执行测试

Array
(
    [0] => Array
        (
            [id] => 6
            [date] => 15.11.2014
            [archived] => 0
        )

    [1] => Array
        (
            [id] => 4
            [date] => 15.12.2014
            [archived] => 0
        )

    [2] => Array
        (
            [id] => 3
            [date] => 19.12.2014
            [archived] => 0
        )
)