Helpex - Trao đổi & giúp đỡ Đăng nhập
145

Câu hỏi này đã có câu trả lời ở đây:

PHP 7, sẽ ra mắt vào tháng 11 năm nay sẽ giới thiệu toán tử Spaceship (<=>). Nó là gì và nó hoạt động như thế nào?

Câu hỏi này đã có câu trả lời trong câu hỏi tham khảo chung của chúng tôi về các toán tử PHP.

145 hữu ích 5 bình luận 74k xem chia sẻ
210

Đây <=>điều hành sẽ cung cấp so sánh kết hợp ở chỗ nó sẽ:

Return 0 if values on either side are equal
Return 1 if value on the left is greater
Return -1 if the value on the right is greater

Các quy tắc được sử dụng bởi toán tử so sánh kết hợp giống như các toán tử so sánh hiện đang được sử dụng bởi PHP viz. <, <=, ==, >=>. Những người từ nền tảng lập trình Perl hoặc Ruby có thể đã quen thuộc với toán tử mới này được đề xuất cho PHP7.

   //Comparing Integers

    echo 1 <=> 1; //ouputs 0
    echo 3 <=> 4; //outputs -1
    echo 4 <=> 3; //outputs 1

    //String Comparison

    echo "x" <=> "x"; // 0
    echo "x" <=> "y"; //-1
    echo "y" <=> "x"; //1
210 hữu ích 4 bình luận chia sẻ
43

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 <=> $bsẽ quay trở lại

một số nguyên nhỏ hơn, bằng hoặc lớn hơn 0 khi $atươ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ự uasortuksort) thuận tiện hơn .

usortlấ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.

43 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ php operators php-7 spaceship-operator , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading