ragnar_ok
@ragnar_ok

Как сортировать массив по условию?

Суть задачи — сортировать транспортные компании в массиве в зависимости от веса посылки: если вес посылки меньше 20, то выше должна быть первая компания, иначе вторая.

Можно как-то лучше реализовать сортировку внутри массива, чем в моем примере? Мое решение кажется совсем топорным.

sandbox.onlinephpfunctions.com

// нужно сортировать транспортные компании в зависимости от веса посылки:
// если вес посылки больше 20,
// то приоритет для транспортной компании bar,
// иначе для транспортной компании foo

$weight = rand(10, 30); // вес посылки

const FOO_ID = 1; // транспортная компания foo имеет id "1"
const BAR_ID = 2; // транспортная компания bar имеет id "2"

$transpotCompanies = [
    'foo' => [
        'id' => 1,
    ],
    'bar' => [
        'id' => 2,
    ],
];

uasort(
    $transpotCompanies, 
    function (array $transpotCompany1, array $transpotCompany2) use ($weight) {
        if ($transpotCompany1['id'] === FOO_ID && $transpotCompany2['id'] === BAR_ID) {
            return $weight >= 20 ? 1 : -1;
        } elseif ($transpotCompany1['id'] === BAR_ID && $transpotCompany2['id'] === FOO_ID) {
            return $weight >= 20 ? -1 : 1;
        }
    
        return 0;
    }
);
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
DevMan
@DevMan
у вас решение здорового человека.

возможно, можно оптимизировать проверки в условиях, но это:
1. невозможно исходя из вопроса.
2. экономия на спичках.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы