按日期对多维数组进行排序,但只能是子级

时间:2018-06-27 12:50:30

标签: php arrays sorting multidimensional-array

我正在尝试对数组的子项进行排序,但失败了。.问题是,只有子项才应该通过其['date'] ['form_date']值(而不是第一层)进行排序/比较:(

  Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-07-07
                            [to_date] => 2018-07-07
                        )

                    [post] => Special: Pferdefotografie
                )

            [1] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-07-21
                            [to_date] => 2018-07-21
                        )

                    [post] => Fotoexkursion Südafrika
                )

            [2] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-07-21
                            [to_date] => 2018-07-21
                        )

                    [post] => Fotoexkursion Landschaftsfotografie
                )

            [3] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-07-21
                            [to_date] => 2018-07-21
                        )

                    [post] => Bildaufbau und Komposition
                )

            [4] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-07-22
                            [to_date] => 2018-07-22
                        )

                    [post] => Bildaufbau und Komposition
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-08-11
                            [to_date] => 2018-08-11
                        )

                    [post] => Bildaufbau und Komposition
                )

            [1] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-08-04
                            [to_date] => 2018-08-04
                        )

                    [post] => Makrofotografie 1
                )

            [2] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-08-26
                            [to_date] => 2018-08-26
                        )

                    [post] => Tierfotografie 2
                )

            [3] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-08-19
                            [to_date] => 2018-08-19
                        )

                    [post] => Tierfotografie 1
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-09-15
                            [to_date] => 2018-09-15
                        )

                    [post] => Bildaufbau und Komposition
                )

            [1] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-09-02
                            [to_date] => 2018-09-02
                        )

                    [post] => Makrofotografie 2
                )

            [2] => Array
                (
                    [date] => Array
                        (
                            [from_date] => 2018-09-01
                            [to_date] => 2018-09-01
                        )

                    [post] => Makrofotografie 1
                )

        )

)

我尝试使用usort来比较日期,但是我猜想它由于嵌套级别而失败了??

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

非常感谢您的帮助!预先感谢您调查此:)

1 个答案:

答案 0 :(得分:0)

因为您的日期为Y-m-d格式,所以您无需费心将它们转换为时间戳,只需将它们作为字符串进行比较即可。正如deceze所说,您只需要迭代第一级并记住按引用进行修改(这样就不会修改数组的“副本”)。

代码:(演示:https://3v4l.org/AXsqR

foreach ($array as &$set) {
    usort($set, function ($a, $b) {
        return strcmp($a['date']['from_date'], $b['date']['from_date']);
    });
}