sanek_os9
@sanek_os9
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux

Как вы сортируете массив с объектами?

Доброго времени суток, пришлось отсортировать массив вида
Array
(
    [0] => Models\Project Object
        (
            [id:Models\Project:private] => 47
            [data:Models\Project:private] => Array
                (
                    [id_project] => 47
                    [title] => Повседневщина
                    [id] => 47
                    [color] => green
                    [id_user] => 32
                    [task_count] => 2
                    [task_lose] => 0
                    [task_active] => 2
                )

        )

    [1] => Models\Project Object
        (
            [id:Models\Project:private] => 48
            [data:Models\Project:private] => Array
                (
                    [id_project] => 48
                    [title] => Для работы
                    [id] => 48
                    [color] => yellow
                    [id_user] => 32
                    [task_count] => 2
                    [task_lose] => 0
                    [task_active] => 2
                )

        )

    [2] => Models\Project Object
        (
            [id:Models\Project:private] => 49
            [data:Models\Project:private] => Array
                (
                    [id_project] => 49
                    [title] => Изменения скрипта Задач
                    [id] => 49
                    [color] => red
                    [id_user] => 32
                    [task_count] => 2
                    [task_lose] => 0
                    [task_active] => 1
                )

        )

)

что аж призадумался, раньше достаточно было сортировки в SQL, а тут так получилось что нужно сначала получить данные, а потом отсортировать готовый многомерный, та еще и ассоциативный массив.
А отсортировать нужно так, сначала по свойству task_lose, потом tasc_active, и в конце task_count.
Моё решение:
$projects = [];
        $count['tasc_active'] = $count['task_lose'] = $count['task_count'] = [];
        $q = DB::me()->query("SELECT `id` FROM `projects`");
        $res = $q->fetchAll();
        $i = 0;
        foreach ($res as $project) {
            $projects[$i] = new Project($project['id']);
            $count['task_lose'][$i] = $projects[$i]->task_lose;
            $count['tasc_active'][$i] = $projects[$i]->task_active;
            $count['task_count'][$i] = $projects[$i]->task_count;
            $i++;
        }
        array_multisort($count['task_lose'], SORT_DESC, $count['tasc_active'], SORT_DESC, $count['task_count'], SORT_DESC, $projects);

Работать, работает, но может есть решение лучше?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 2
KorniloFF
@KorniloFF
Работаю по font-end / JS
Комментировать
nexmean
@nexmean
погромист
Для таких вещей из покон веков используются функции наподобие `usort`, в которые передаются функции сравнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы