megakor
@megakor
PHP погроммист | ru.sarvarov.dev

Функция usort(). Как сделать множественную сортировку?

Мне нужно отсортировать массив:
1. Сначала идут числа, которые делятся на 2 без остатка (эти числа тоже между собой по возрастанию).
2. Потом идут все остальные числа по возрастанию.

Пока получилось так:
$arr = [1, 4, 3, 2, 5];

usort(
    $arr, 
    fn($a, $b) => $a % 2 === 0 ? -1 : 1
);
// [4, 2, 5, 3, 1]

// А нужно чтобы было так: [2, 4, 1, 3, 5]


Это можно как-то сделать в рамках одного usort()?

p.s. с помощью foreach решать эту задачу не предлагать
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
aleksejjjj
@aleksejjjj
$arr = [1, 4, 3, 2, 5];

usort($arr, function (int $a, int $b) {
    // Если тип одинаковый (чёт/нечёт) - сравниваем значения
    if ($a % 2 === $b % 2) {
        return $a <=> $b;
    }
    
    // Иначе возвращаем чётные
    return $a % 2 === 0 ? -1 : 1;
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Smart Медицина Москва
от 150 000 ₽
Spice IT Recruitment Москва
До 230 000 ₽
Playkot Санкт-Петербург
от 150 000 до 200 000 ₽
06 июл. 2020, в 23:49
10000 руб./за проект
06 июл. 2020, в 23:32
35000 руб./за проект