Я отвечу на это так: обобщенно , независимо от того, сколько предметов вы хотите отсортировать!
Сортировка по return_fare
, затем one_way_fare
:
usort($data, function($a, $b) {
if ($a['return_fare'] != $b['return_fare']) {
return $a['return_fare'] <=> $b['return_fare'];
}
return $a['one_way_fare'] <=> $b['one_way_fare'];
});
Сортировка по return_fare
, затем one_way_fare
, затем destination
:
usort($data, function($a, $b) {
if ($a['return_fare'] != $b['return_fare']) {
return $a['return_fare'] <=> $b['return_fare'];
}
if ($a['one_way_fare'] != $b['one_way_fare']) {
return $a['one_way_fare'] <=> $b['one_way_fare'];
}
return strnatcasecmp($a['destination'], $b['destination']);
});
Сортировка по return_fare
:
usort($data, function($a, $b) {
return $a['return_fare'] <=> $b['return_fare'];
});
Примечание: вам не нужно использовать анонимную функцию с usort
!
function cmp($a, $b) {
return $a['return_fare'] <=> $b['return_fare'];
}
usort($data, 'cmp');
// Use a function inside a class:
class MyClass {
public static function compare($a, $b) {
return $a['return_fare'] <=> $b['return_fare'];
}
}
usort($data, ['MyClass', 'compare']);
Вы также можете связать их с помощью оператора Элвиса (?:
):
usort($data, function($a, $b) {
return $a['return_fare'] <=> $b['return_fare'] ?:
$a['one_way_fare'] <=> $b['one_way_fare'] ?:
strnatcasecmp($a['destination'], $b['destination']);
});
В последнем примере использовались оператор космического корабля (<=>
) и оператор Элвиса (?:
).Разве программирование не прекрасно?