Суть задачи — сортировать транспортные компании в массиве в зависимости от веса посылки: если вес посылки меньше 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;
}
);