按日期时间键

时间:2017-01-27 13:20:40

标签: php arrays sorting datetime associative-array

我有一个像这样的不同索引位置的数组。

Array
(
[0] => Array
    (
        [datetime] => 27/01/2017 12:18
        [location] => Raunheim (DE)
        [date] => 27/01/2017
        [time] => 12:18
        [status] => Erfolgreich zugestellt.
        [status_1] => (Retoure an Versender)
    )
[2] => Array
    (
        [datetime] => 11/01/2017 16:10
        [location] => Vlotho (DE)
        [date] => 11/01/2017
        [time] => 16:10
        [status] => Ihr Paket konnte nicht wie geplant zugestellt werden und ist wieder im Paketzustellzentrum.
    )
[2] => Array
    (
        [datetime] => 25/01/2017 11:24
        [status] => Erfolgreich zugestellt.
        [status_id] => 
        [date] => 25/01/2017
        [location] => Altentreptow (DE)
        [time] => 11:24
    )
)

我想使用datetime键对此数组进行排序。我尝试过解决方案

usort($second_tracking_array, 'date_compare');
function date_compare($a, $b) {

    $date1 = $a['datetime'];
    $date2 = $b['datetime'];

    $t1 = strtotime($date1);
    $t2 = strtotime($date2);

    echo $t1 . " : " . $t2 . "</br>";
    return $t2 - $t1;
}

但是数组没有排序。在调试时,我发现仅当所有索引位置都正确时,函数才能工作并对数组进行排序。但在我的情况下,我的一些数组索引位置是不同的。

1 个答案:

答案 0 :(得分:1)

您需要更改策略以解析日期字符串。原因是您的日期时间字符串显然具有的格式不是任何标准的符合变体。

<?php

define('CUSTOM_DATE_FORMAT', 'd/m/Y G:i');

$second_tracking_array = [
    [
        'datetime' => '27/01/2017 12:18',
        'location' => 'Raunheim (DE)',
        'date' => '27/01/2017',
        'time' => '12:18',
        'status' => 'Erfolgreich zugestellt.',
        'status_1' => '(Retoure an Versender)'
    ],
    [
        'datetime' => '11/01/2017 16:10',
        'location' => 'Vlotho (DE)',
        'date' => '11/01/2017',
        'time' => '16:10',
        'status' => 'Ihr Paket konnte nicht wie geplant zugestellt werden und ist wieder im Paketzustellzentrum.'
    ],
    [
        'datetime' => '25/01/2017 11:24',
        'status' => 'Erfolgreich zugestellt.',
        'status_id' => '',
        'date' => '25/01/2017',
        'location' => 'Altentreptow (DE)',
        'time' => '11:24'
    ]
];

usort(
    $second_tracking_array,
    function($a, $b) {
        $date1 = DateTime::createFromFormat(CUSTOM_DATE_FORMAT, $a['datetime']);
        $date2 = DateTime::createFromFormat(CUSTOM_DATE_FORMAT, $b['datetime']);
        return $date1 > $date2;
    }
);

print_r($second_tracking_array);

以上显而易见的输出是:

Array
(
    [0] => Array
        (
            [datetime] => 11/01/2017 16:10
            [location] => Vlotho (DE)
            [date] => 11/01/2017
            [time] => 16:10
            [status] => Ihr Paket konnte nicht wie geplant zugestellt werden und ist wieder im Paketzustellzentrum.
        )

    [1] => Array
        (
            [datetime] => 25/01/2017 11:24
            [status] => Erfolgreich zugestellt.
            [status_id] =>
            [date] => 25/01/2017
            [location] => Altentreptow (DE)
            [time] => 11:24
        )

    [2] => Array
        (
            [datetime] => 27/01/2017 12:18
            [location] => Raunheim (DE)
            [date] => 27/01/2017
            [time] => 12:18
            [status] => Erfolgreich zugestellt.
            [status_1] => (Retoure an Versender)
        )

)