Сортировка многомерного массива в Laravel - PullRequest
0 голосов
/ 05 мая 2020

Я использую laravel и хочу отсортировать этот массив на основе поля ['messages'] «updated_at». Вверху массива должно отображаться последнее сообщение. Я пробовал array_multisort (array_column ($ yourArray, "price"), SORT_AS C, $ yourArray) , но не работал.

Вот мой многомерный массив, который я хочу отсортировать по дате.

Array
(
    [current_page] => 1
    [data] => Array
        (
            [0] => Array
                (
                    [id] => 236
                    [user] => Array
                        (
                            [id] => 91
                            [email] => demo3@test.com
                            [updated_at] => 2020-04-29 09:28:26
                        )

                    [messages] => Array
                        (
                        )

                )

            [1] => Array
                (
                    [id] => 235
                    [description] => demo3
                    [user] => Array
                        (
                            [id] => 91
                            [email] => demo3@test.com
                            [updated_at] => 2020-04-29 09:28:26
                        )
                    [messages] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 95
                                    [message] => Pickup message test
                                    [user_id] => 35
                                    [created_at] => 2020-04-28 12:28:18
                                    [updated_at] => 2020-04-28 12:28:18
                                )
                        )

                )

            [2] => Array
                (
                    [id] => 215
                    [description] => Testing for messages
                    [user] => Array
                        (
                            [id] => 35
                            [email] => test@outlook.com
                            [updated_at] => 2020-01-26 17:34:35
                        )

                    [messages] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 88
                                    [message] => Testing for the message if not sent by business first.
                                    [user_id] => 35
                                    [created_at] => 2020-04-28 12:15:14
                                    [updated_at] => 2020-04-28 12:15:14

                                )

                            [1] => Array
                                (
                                    [id] => 90
                                    [message] => Looks good.
                                    [user_id] => 69
                                    [created_at] => 2020-04-28 12:15:45
                                    [updated_at] => 2020-04-28 12:15:45

                                )


                        )

                )

        )
)

Как этого добиться?

1 Ответ

0 голосов
/ 05 мая 2020

Используйте функцию usort https://www.php.net/manual/en/function.usort.php

Напишите обратный вызов, сравнивая вложенный атрибут created_at

Также, если у вас есть коллекция laravel, вы можете использовать

$collection = $collection->sort(function ($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

Или, если вы используете красноречивый, вы можете заказать его у SQL

Message::where(...)->orderBy('created_at', 'DESC')->paginate(20)

У пользователя

$user->with(['messages' => function ($query) {
    $query->orderBy('created_at', 'DESC');
}]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...