一段比较精妙的 PHP 代码[其实是我菜]

梦浪的小虾米
2022-05-05 / 2 评论 / 1,588 阅读 / 正在检测是否收录...

这是一段为数组值从小到大进行排序的代码,该函数的比较算法比较稳定,所谓稳定是指两个值相等的时候,不改变排序顺序。
具体代码如下:

$array = [4,1,2,3,10,17,5,33,24,18];
uasort($array, function($a, $b){
    return $a<=>$b;
});
var_dump($array);

这段代码精妙点在于:

  1. uasort 函数的使用

    uasort 的比较算法在 8.0 版本稳定了下来。具体说明可以看 https://www.php.net/manual/zh/function.uasort.php

    ps 主要是看这句:在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

    然后太空船比较符正好返回了这三个整数。

  2. 匿名函数的使用

    不知道说啥好了,反正省了行数吧

  3. 增加了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);
0

评论

博主关闭了所有页面的评论