加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP数组排序 #PHP7# PHP7的新特性详解-- <=>(Spaceships)

发布时间:2022-10-08 11:10:44 所属栏目:PHP教程 来源:
导读:  结合比较运算符

  主要看长相PHP数组排序,称呼为飞船运算符是显而易见的,但这是非官方的名字; 更专业的冠冕堂皇的名称是“结合比较运算符”,但它有什么作用?我们为什么需要它?

  我见
  结合比较运算符
 
  主要看长相PHP数组排序,称呼为飞船运算符是显而易见的,但这是非官方的名字; 更专业的冠冕堂皇的名称是“结合比较运算符”,但它有什么作用?我们为什么需要它?
 
  我见过好多开发者的不同解释,虽然他们都是正确的,他们没有从本质上去解释这个操作符到底在做什么。
 
  在PHP中,我们会比较两个值并返回一个布尔值来表示,比较的结果是true或者false
 
  1 == 2 // false
 
  2 == 2 // true
 
  1 != 13 // true
 
  55 > 102 // false
 
  在PHP7中,我们可以使用“结合比较操作”用于比较两个变量,而不只是返回true或者false ,我们反而会返回-1、0、 1,0表示相等,1代表大于,-1表示小于。
 
  下面这个例子,我们预计该操作符会返回如下的结果:

  1 <=> 1 // 0 (1 is equal to 1 so return 0)
 
  2 <=> 1 // 1 (2 is greater than 1 so return 1)
 
  1 <=> 2 // -1 (1 is less than 2 so return -1)
 
  156 <=> 12 // 1 (156 is greater than 12 so return 1)
 
  19 <=> 20 // -1 (19 is less than 20 so return -1)
 
  在它的核心处,使用的就是操作符呢! 这很明确,比较两个值,并返回-1,0或1。
 
  Uhhhhh,为什么呢?
 
  如果你有点喜欢该操作符,您可能会认为这么使用并没有太多用处。在我第一次看到这个操作符时我也不知道,我会在什么地方用它以及为什么用,但最终我的结论是...... 排序
 
  PHP 5.x的usort()
 
  在PHP 5.x的,我们必须执行一个用户定义排序逻辑处理,如我们所期望的,我们可以通过数组来进行排序处理,使用一个可调用的方法来确定数组元素的顺序。
 
  在可调用的方法中就可以在小于时返回-1,在等于时返回0,在大于时返回1。
 
  $smallPeople = ['Doc', 'Grumpy', 'Happy', 'Sleepy', 'Sneezy', 'Dopey', 'Bashful'];
 
  usort($smallPeople, function($a, $b) {
 
      if ($a == $b) {
 
          return 0;
 
      }
 
      if ($a > $b) {
 
          return 1;
 
      }
 
      if ($a < $b) {
 
          return -1;
 
      }
 
  });
 
  var_dump($smallPeople);

  在这个例子中,当我们var_dump()打印数组时,我们现在应该看到数组的元素按字母顺序排序。
 
  array(7) {
 
      [0]=> string(7) "Bashful"
 
      [1]=> string(3) "Doc"
 
      [2]=> string(5) "Dopey"
 
      [3]=> string(6) "Grumpy"
 
      [4]=> string(5) "Happy"
 
      [5]=> string(6) "Sleepy"
 
      [6]=> string(6) "Sneezy"
 
  }

  数组排序像这样是完全可以接受的,只是有点冗长,这时我们就可以利用操作符。
 
  $smallPeople = ['Doc', 'Grumpy', 'Happy', 'Sleepy', 'Sneezy', 'Dopey', 'Bashful'];
 
  usort($smallPeople, function($a, $b) {
 
      return $a <=> $b;
 
  });
 
  var_dump($smallPeople);
 
  var_dump()的结果在这两个例子中是相同的。 为了更深入理解这一概念,我们也可以使用该操作符来根据每个元素的字符串的长度数来排序。

  $smallPeople = ['Doc', 'Grumpy', 'Happy', 'Sleepy', 'Sneezy', 'Dopey', 'Bashful'];
 
  usort($smallPeople, function($a, $b) {
 
      return strlen($a) <=> strlen($b);
 
  });
 
  var_dump($smallPeople);
 
  数组排序后的结果会如下:

  array(7) {
 
      [0]=> string(3) "Doc"
 
      [1]=> string(5) "Happy"
 
      [2]=> string(5) "Dopey"
 
      [3]=> string(6) "Grumpy"
 
      [4]=> string(6) "Sleepy"
 
      [5]=> string(6) "Sneezy"
 
      [6]=> string(7) "Bashful"
 
  }

  有一点需要注意,usort不会返回排序后的数组,这是一个破坏性的功能,它将直接作用到你通过引用传递过来的数组上。
 
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!