比较数组、对象或字符串使用
PHP太空船操作符(<=>)遵循与
其他PHP比较操作符 相同的规则:
字符串比较
字符串按字典顺序进行比较:
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
数组比较
数组的比较基于以下几点:
- 数组元素较少的被认为是较小的;
- 长度相同但键不同的数组是无法比较的;
- 长度和键相同的数组会返回第一个不相等的结果;
- 长度和键/值对相同的数组被认为是相等的.
// array with fewer elements is considered smaller
echo [1, 2] <=> [1, 2, 3]; // -1
echo [1, 2, 3] <=> [1, 2]; // 1
// arrays with same length but different keys are incomparable, always returning 1
echo ['a' => 1, 'b' => 2, 'c' => 3] <=> ['a' => 1, 'b' => 2, 'd' => 4]; // 1
echo ['a' => 1, 'b' => 2, 'c' => 3] <=> ['a' => 1, 'b' => 2, 'd' => 4]; // 1
// arrays with same length and keys return comparison result of first non-equal value
echo ['a' => 1, 'b' => 2, 'c' => 4] <=> ['a' => 1, 'b' => 3, 'c' => 2]; // -1
// arrays with same length and key/value pairs are equal, regardless of order
echo ['a' => 1, 'b' => 2, 'c' => 3] <=> ['c' => 3, 'b' => 2, 'a' => 1]; // 0
写了一篇
博客文章,供那些对学习更多信息感兴趣的人阅读。
对象比较
对象比较基于以下几点:
- 不同类的对象无法比较;
- 相同类的对象,如果属性值不同,则返回第一个不相等的结果;
- 相同类的对象,如果属性值相同,则认为它们相等。
// objects of different classes are incomparable, always returning 1
class Foo {}
class Bar {}
echo new Foo() <=> new Bar(); // 1
echo new Bar() <=> new Foo(); // 1
class Car
{
public function __construct(
private string $name,
) {}
}
$car1 = new Car('Porsche');
$car2 = new Car('Lamborghini');
echo $car1 <=> $car2;
echo $car2 <=> $car1;
class Car
{
public function __construct(
private string $name,
) {}
}
$car1 = new Car('Porsche');
$car2 = new Car('Porsche');
echo $car1 <=> $car2;
echo $car2 <=> $car1;
写了一篇
博客文章,供那些对进一步了解感兴趣的人阅读。
echo "Its Me at SO" <=> "its Me at SO";
will return 0". 对我来说并不是这样:它返回1,这正是我所期望的,因为 "i" 大于 "I"。你真的会得到0吗? - Adam Cameron