【问题标题】:Spaceship operator confusion in PHP7 (return -1)PHP7 中的宇宙飞船操作符混淆(返回 -1)
【发布时间】:2016-05-18 19:46:39
【问题描述】:

我对 PHP7 还很陌生,到目前为止它看起来很棒而且功能强大。我一直在使用PHP5.6,所以我开始了解宇宙飞船运算符<=>的用法。但不知何故,我无法理解语句返回-1 的逻辑。我知道返回0 或1 的意义,它们是false 或true。谁能澄清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>';
}

【问题讨论】:

标签: php php-7


【解决方案1】:

比较传递给比较函数的两个值时,您有三种可能性:$a &lt; $b、$a == $b 或 $a &gt; $b。所以你需要三个不同的返回值,而 PHP 选择了整数:-1、0 和 1。我想它可以很容易地是字符串lesser、equal 和greater 或整数5、7 和9 或任何组合,但事实并非如此。

来自手册usort()

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

  • $a &lt; $b返回-1
  • $a == $b返回0
  • $a &gt; $b返回1

这不是 PHP 中类型的工作方式,但您可以这样想:是$a &gt; $b?其中-1 表示false,1 表示true,0 表示两者都不(相等)。

【讨论】:

  • 我完全理解这一点。但是返回 -1、返回 0、返回 1 是返回一个整数 -1,0,1 还是返回布尔真/假的东西?这就是我想了解的全部内容。
  • 感谢您的宝贵时间。
猜你喜欢
  • 2011-01-30
  • 1970-01-01
  • 2021-04-23
  • 2012-12-14
  • 2021-07-27
  • 2011-03-04
  • 1970-01-01
  • 2021-01-07
相关资源
最近更新 更多