Сортировать многомерный массив по дате, но только это дети - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь отсортировать дочерние элементы массива, но безуспешно. Проблема заключается в том, что только дочерние элементы должны сортироваться / сравниваться друг с другом по их значению ['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 голосов
/ 27 июня 2018

Поскольку ваши даты в формате 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']);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...