PHP对一个复杂的多维数组按时间戳排序


PHP sort a complicated multi-dimensional array by timestamp

我有一个数组如下:

Array
(
    [0] => Array
        (
            [id] => 2
            [type] => comment
            [batch] => Array
                    (
                        [0] => Array
                            (
                                [id] => T001
                                [datetime] => 2010-05-15 11:29:00
                            )
                        [1] => Array
                            (
                                [id] => T003
                                [datetime] => 2010-05-15 11:33:00
                            )
                    )
        )
    [1] => Array
        (
            [id] => 3
            [type] => status
            [batch] => Array
                    (
                        [0] => Array
                            (
                                [id] => T002
                                [datetime] => 2010-05-15 11:31:00
                            )
                        [1] => Array
                            (
                                [id] => T004
                                [datetime] => 2010-05-15 12:32:00
                            )
                        [2] => Array
                            (
                                [id] => T006
                                [datetime] => 2010-05-15 12:33:00
                            )
                    )
        )
    [2] => Array
        (
            [id] => 4
            [type] => status
            [batch] => Array
                    (
                        [0] => Array
                            (
                                [id] => T005
                                [datetime] => 2010-05-15 12:34:00
                            )
                        [1] => Array
                            (
                                [id] => T007
                                [datetime] => 2010-05-15 13:35:00
                            )
                        [2] => Array
                            (
                                [id] => T008
                                [datetime] => 2010-05-15 10:36:00
                            )
                    )
        )
)

我想通过重新排序数组,只有最后日期时间在子数组[batch]

结果应该是这样的:

Array
(
    [0] => Array
        (
            [id] => 4
            [type] => status
            [batch] => Array
                    (
                        [0] => Array
                            (
                                [id] => T005
                                [datetime] => 2010-05-15 12:34:00
                            )
                        [1] => Array
                            (
                                [id] => T007
                                [datetime] => 2010-05-15 13:35:00
                            )
                        [2] => Array
                            (
                                [id] => T008
                                [datetime] => 2010-05-15 10:36:00
                            )
                    )
        )
    [1] => Array
        (
            [id] => 2
            [type] => comment
            [batch] => Array
                    (
                        [0] => Array
                            (
                                [id] => T001
                                [datetime] => 2010-05-15 11:29:00
                            )
                        [1] => Array
                            (
                                [id] => T003
                                [datetime] => 2010-05-15 11:33:00
                            )
                    )
        )
    [2] => Array
        (
            [id] => 3
            [type] => status
            [batch] => Array
                    (
                        [0] => Array
                            (
                                [id] => T002
                                [datetime] => 2010-05-15 11:31:00
                            )
                        [1] => Array
                            (
                                [id] => T004
                                [datetime] => 2010-05-15 12:32:00
                            )
                        [2] => Array
                            (
                                [id] => T006
                                [datetime] => 2010-05-15 12:33:00
                            )
                    )
        )
)

我可以用"array_multisort"吗?请建议。非常感谢!

使用usort,允许您使用用户定义的比较函数对数组进行排序。(PHP文档)

usort($array, function($a, $b) {
    $lastTimestampA = end($a['batch']);
    $lastTimestampB = end($b['batch']);
    return strtotime($lastTimestampA['datetime']) > strtotime($lastTimestampB['datetime']);
})