首页 > 解决方案 > 按日期对多维数组进行排序,但只有它的孩子

问题描述

我正在尝试对数组的子项进行排序,但失败得很惨。问题是只有子项应该通过它们的 ['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']);
});

任何帮助深表感谢!提前感谢您对此进行调查:)

标签: phparrayssortingmultidimensional-array

解决方案


因为您的日期是有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']);
    });
}

推荐阅读