PHP 7引入了太空船(<=>)操作符。它是什么?它是如何工作的?
当前回答
根据引入操作符的RFC, $a <=> $b的计算结果为:
如果$a == $b = 0 -1如果$a < $b 1如果$a > $b
在我尝试过的每个场景中,这似乎都是实际情况,尽管严格来说,官方文档只提供了略弱的保证,即$a <=> $b将返回
当$a分别小于、等于或大于$b时,一个小于、等于或大于0的整数
不管怎样,你为什么要这样一个操作员?同样,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的有用性部分找到。
其他回答
根据引入操作符的RFC, $a <=> $b的计算结果为:
如果$a == $b = 0 -1如果$a < $b 1如果$a > $b
在我尝试过的每个场景中,这似乎都是实际情况,尽管严格来说,官方文档只提供了略弱的保证,即$a <=> $b将返回
当$a分别小于、等于或大于$b时,一个小于、等于或大于0的整数
不管怎样,你为什么要这样一个操作员?同样,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的有用性部分找到。
它是一种新的组合比较算子。在行为上类似于strcmp()或version_compare(),但它可以用于所有泛型PHP值,具有与<,<=,==,>=,>相同的语义。如果两个操作数相等,则返回0,如果左操作数大于1,则返回-1。它使用与现有比较运算符完全相同的比较规则:<、<=、==、>=和>。
点击这里了解更多
<=>("太空船")操作符将提供组合比较,因为它将:
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
推荐文章
- PHP中接口的意义是什么?
- 致命错误:未找到类“SoapClient”
- 我目前使用的是哪个版本的CodeIgniter ?
- 合并两个PHP对象的最佳方法是什么?
- 如何使HTTP请求在PHP和不等待响应
- 发送附件与PHP邮件()?
- 如何获得当前的路线在Symfony 2?
- 用PHP删除字符串的前4个字符
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- 一个函数的多个返回值
- 在PHP中使用foreach循环时查找数组的最后一个元素
- 检查数组是否为空
- PHP DOMDocument loadHTML没有正确编码UTF-8
- PHP在个位数数前加上前导零
- PHPMailer字符编码问题