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

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

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

$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

评论 (2)

取消
  1. 头像
    哥斯拉
    Windows 10 · Google Chrome

    高手,uasort来用数组值排序的吧?
    之前只能用循环来排序,效率比较低。

    回复
    1. 头像
      梦浪的小虾米 作者
      Windows 10 · Google Chrome
      @ 哥斯拉

      是的,不过你也提醒了我,文章写的还是不够明白,让人没有看懂这段代码的作用,我在补充一下

      回复