我会以一种可以概括的方式回答这个问题,不管你想对多少项目进行排序!
按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']);
您也可以使用 Elvis Operator (?:) 链接这些:
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']);
});
最后一个示例使用了 Spaceship Operator (<=>) 和 Elvis Operator (?:)。编程不是很好吗?