PHP 7 中的 <=>(“宇宙飞船”运算符)是什么?
2022-08-30 06:10:38
(“宇宙飞船”)运营商将提供组合比较,因为它将:<=>
Return 0 if values on either side are equal
Return 1 if the value on the left is greater
Return -1 if the value on the right is greater
组合比较运算符使用的规则与 PHP 即、和 当前使用的比较运算符相同。那些来自Perl或Ruby编程背景的人可能已经熟悉这个为PHP7提出的新运算符。<
<=
==
>=
>
//Comparing Integers
echo 1 <=> 1; //output 0
echo 3 <=> 4; //output -1
echo 4 <=> 3; //output 1
//String Comparison
echo "x" <=> "x"; //output 0
echo "x" <=> "y"; //output -1
echo "y" <=> "x"; //output 1
根据引入运算符的 RFC,计算结果为:$a <=> $b
$a == $b
$a < $b
$a > $b
在我尝试过的每种情况下,实践中似乎都是如此,尽管严格来说,官方文档只提供稍微弱一点的保证,将返回$a <=> $b
小于、等于或大于零的整数,当分别小于、等于或大于
$a
$b
无论如何,你为什么想要这样一个运营商?同样,RFC解决了这个问题 - 它几乎完全是为了方便为usort
编写比较函数(以及类似的uasort
和uksort
)。
usort
将数组作为其第一个参数进行排序,并将用户定义的比较函数作为其第二个参数。它使用该比较函数来确定数组中一对元素中的哪一个更大。比较函数需要返回:
小于、等于或大于零的整数(如果认为第一个参数分别小于、等于或大于第二个参数)。
宇宙飞船操作员使这简洁方便:
$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'];
});
使用宇宙飞船运算符编写的比较函数的更多示例可以在 RFC 的“有用性”部分找到。