<=> (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']; 在大多数情况下可以工作,但使用 <=> 操作符更稳健,更适合排序函数的语义要求。