太空飞船运营商在PHP7中的混淆(返回-1)

时间:2016-05-18 19:46:39

标签: php php-7

我是PHP7的新手,到目前为止看起来非常强大。我一直在使用PHP5.6,所以我开始了解太空飞船运营商<=>的用法。但不知怎的,我无法得到语句返回-1的逻辑。我知道返回01 falsetrue的重点。任何人都可以澄清return -1的用法吗?

Function normal_sort($a, $b) : int 
{ 
  if( $a == $b )
    return 0;
  if( $a < $b )
   return -1;
  return 1;
}

function space_sort($a, $b) : int
{
   return $a <=> $b;
}

$normalArray = [1,34,56,67,98,45];

//Sort the array in asc
usort($normalArray, 'normal_sort');

foreach($normalArray as $k => $v)
{
   echo $k.' => '.$v.'<br>';
}

$spaceArray = [1,34,56,67,98,45];

//Sort it by spaceship operator
usort($spaceArray, 'space_sort');

foreach($spaceArray as $key => $value)
{
   echo $key.' => '.$value.'<br>';
}

1 个答案:

答案 0 :(得分:2)

在比较传递给比较函数的两个值时,您有三种可能性:$a < $b$a == $b$a > $b。所以你需要三个不同的返回值,PHP选择了整数:-101。我想它可以很容易地成为字符串lesserequalgreater或整数579或任意组合,但是不是。

来自手册usort()

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

  • $a < $b返回-1
  • $a == $b返回0
  • $a > $b返回1

这不是PHP中的类型如何工作,但您可以这样想:是$a > $b?其中-1表示false1表示true0表示两者(等于)。