这是一段为数组值从小到大进行排序的代码,该函数的比较算法比较稳定,所谓稳定是指两个值相等的时候,不改变排序顺序。
具体代码如下:
$array = [4,1,2,3,10,17,5,33,24,18];
uasort($array, function($a, $b){
return $a<=>$b;
});
var_dump($array);
这段代码精妙点在于:
uasort 函数的使用
uasort 的比较算法在 8.0 版本稳定了下来。具体说明可以看 https://www.php.net/manual/zh/function.uasort.php
ps 主要是看这句:在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
然后太空船比较符正好返回了这三个整数。
匿名函数的使用
不知道说啥好了,反正省了行数吧
增加了php7新技巧:太空船比较 $a<=>$b
代码可以转化为:if($a > $b) { return 1; } elseif ($a == $b) { return 0; } else { return -1; }
所以开头的代码完整转化成能看得懂的代码就是:
$array = [4,1,2,3,10,17,5,33,24,18];
function jisuan($a, $b) {
if($a > $b) {
return 1;
} elseif ($a == $b) {
return 0;
} else {
return -1;
}
}
uasort($array, 'jisuan');
var_dump($array);
高手,uasort来用数组值排序的吧?
之前只能用循环来排序,效率比较低。
是的,不过你也提醒了我,文章写的还是不够明白,让人没有看懂这段代码的作用,我在补充一下