PHP数组排序 #PHP7# PHP7的新特性详解-- <=>(Spaceships)
发布时间:2022-10-08 11:10:44 所属栏目:PHP教程 来源:
导读: 结合比较运算符
主要看长相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不会返回排序后的数组,这是一个破坏性的功能,它将直接作用到你通过引用传递过来的数组上。 (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐