<=>
(Spaceship Operator)处理。
<=> 是 PHP 中的 太空船操作符 - Spaceship Operator
,它用于比较两个表达式。这个操作符返回以下三种可能的值之一:
<?php $a = 5; $b = 10; echo $a <=> $b; // 输出 -1,因为 5 小于 10
这个操作符常用于排序函数中,比如 usort,可以很方便地进行数值或字符串的比较,但注意下面的方法是不精准的:
<?php // 不精准,强烈不推荐 usort($hotels, function($a, $b) { return $b['value'] - $a['value']; // 降序排序 // 如果要升序排序,可以使用 $a['value'] - $b['value']; });
PHP 使用太空船操作符,是正确的用法:
<?php // 太空船操作符 - 正确用法 usort($array, function($a, $b) { return $b['value'] <=> $a['value']; });
为了更形象的对比上面2种方式导致的 PHP 数组排序结果问题,这里给出测试示例:
<?php $hotels = array( array('name' => '北京', 'value' => 20.1), array('name' => '镇江', 'value' => 15), array('name' => '厦门', 'value' => 10.1), array('name' => '遵义', 'value' => 8.6), array('name' => '天津', 'value' => 9), array('name' => '济南', 'value' => 4.6), array('name' => '上海', 'value' => 2.8) ); # 可以分别用 <=> 和 $b['value'] <=> $a['value'] 对比, # 发现太空操作符 <=> 返回的排序结果最正确
使用 return $b['value'] - $a['value'];
是可以实现排序的,但确实不如 <=> 操作符精准,尤其是在以下情况下:
return $b['value'] - $a['value']
; 在大多数情况下可以工作,但使用 <=> 操作符更稳健,更适合排序函数的语义要求。