将于今年11月发布的PHP 7将引入太空船(<=>)操作符。它是什么?它是如何工作的?
这个问题在我们关于PHP操作符的一般参考问题中已经有的答案。
<=>("太空船")操作符将提供组合比较,因为它将:
<=>
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
它是一种新的组合比较算子。在行为上类似于strcmp()或version_compare(),但它可以用于所有泛型PHP值,具有与<, <=, ==, >=, >相同的语义。如果两个操作数相等,则返回0,如果左操作数大于1,如果右操作数大于-1。它使用与现有比较操作符完全相同的比较规则:<, <=, ==, >=和>。
strcmp()
0
1
-1
点击这里了解更多
根据引入操作符的RFC, $a <=> $b计算为:
$a <=> $b
$a == $b
$a < $b
$a > $b
这在我尝试过的每个场景中似乎都是如此,尽管严格地说官方文档只提供了略微较弱的$a <=> $b将返回的保证
当$a分别小于、等于或大于$b时,则为小于、等于或大于0的整数
$a
$b
不管怎样,你为什么要这样一个操作员?同样,RFC解决了这个问题——这几乎完全是为了更方便地为usort(以及类似的uasort和uksort)编写比较函数。
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的有用性部分中找到。