Theo RFC đã giới thiệu nhà điều hành , $a <=> $b
đánh giá:
- 0 nếu
$a == $b
- -1 nếu
$a < $b
- 1 nếu
$a > $b
có vẻ như là trường hợp thực tế trong mọi kịch bản tôi đã thử, mặc dù hoàn toàn các tài liệu chính thức chỉ đưa ra sự đảm bảo yếu hơn một chút $a <=> $b
sẽ quay trở lại
một số nguyên nhỏ hơn, bằng hoặc lớn hơn 0 khi $a
tương ứng nhỏ hơn, bằng hoặc lớn hơn$b
Bất kể, tại sao bạn muốn một nhà điều hành như vậy? Một lần nữa, RFC giải quyết vấn đề này - nó hoàn toàn giúp cho việc viết các hàm so sánh cho usort
(và tương tự uasort
và uksort
) thuận tiện hơn .
usort
lấy một mảng để sắp xếp làm đối số đầu tiên của nó và hàm so sánh do người dùng định nghĩa làm đối số thứ hai của nó. Nó sử dụng chức năng so sánh đó để xác định cặp phần tử nào trong mảng lớn hơn. Hàm so sánh cần trả về:
một số nguyên nhỏ hơn, bằng hoặc lớn hơn 0 nếu đối số thứ nhất được coi là tương ứng nhỏ hơn, bằng hoặc lớn hơn thứ hai.
Toán tử tàu vũ trụ làm cho điều này ngắn gọn và thuận tiện:
$things = [
[
'foo' => 5.5,
'bar' => 'abc'
],
[
'foo' => 7.7,
'bar' => 'xyz'
],
[
'foo' => 2.2,
'bar' => 'efg'
]
];
// Sort $things by 'foo' property, ascending
usort($things, function ($a, $b) {
return $a['foo'] <=> $b['foo'];
});
// Sort $things by 'bar' property, descending
usort($things, function ($a, $b) {
return $b['bar'] <=> $a['bar'];
});
Có thể tìm thấy nhiều ví dụ khác về các hàm so sánh được viết bằng toán tử tàu vũ trụ trong phần Hữu ích của RFC.