美文网首页
关于php中usort函数的解读

关于php中usort函数的解读

作者: 舒小贱 | 来源:发表于2017-11-06 18:56 被阅读0次

最近学习遇到自定义数组排序函数usort()有些不了解,搜了很多地方都没有很好的解释,自己研究了一下
定义和用法
usort() 使用用户自定义的比较函数对数组进行排序。

下面是一个简单的例子:

function my_sort($a,$b)
{
    if($a == $b){
        return 0;
    }

    return $a < $b ? -1 : 1;
}

$a=array(4,2,8,6);
usort($a, "my_sort");


for($x=0; $x<count($a); $x++)
{
    var_dump($a[$x]);
}

结果为:

D:\Program Files (x86)\360\skylar6\php>php 1.php
int(2)
int(4)
int(6)
int(8)

官方解释:

语法

usort(array,myfunction)
参数 描述
array 必需。规定要排序的数组。
myfunction 可选。一个定义了可调用比较函数的字符串。如果第一个参数 <, =, > 第二个参数,相应地比较函数必须返回一个 <, =, > 0 的整数。
技术细节
返回值: 如果成功则返回 TRUE,如果失败则返回 FALSE。
PHP 版本: 4+

自己的解释:usort两两提取数组中的数值,并按顺序输入自定义函数中,自定义函数根据内容返回1或者-1;usort根据返回值为1或者-1,得到传入的数值1“大于”或者“小于”数值2,然后对数值进行从小到大的排序。即:返回值为1,说明数值1“大于”数值2,然后排序:数值2—>数值1;返回值为-1,说明数值1“小于”数值2,然后排序:数值1->数值2。

上面自定义函数中,$a<$b如果正确返回1,说明$a"大于"$b,则按照顺序$b->$a来排序;如果错误返回-1,说明说明$a"小于"$b,则按照顺序$a->$b来排序。

下面进行一个较为复杂的排序:实现对一个数组先奇后偶,然后再进行从小到大的排序效果。

//从奇到偶,然后奇偶内部从小到大
function my_sort($a,$b)
{
    if($a%2 == 0 && $b%2 == 0){
        if($a == $b){
            return 0;
        }
        return $a < $b ? -1:1; 
    }
    if($a%2 == 0){
        return 1;
    }
    if($b%2 == 0){
        return -1;
    }
    
    return $a < $b ? -1 : 1;
}

$a=array(22,57,55,12,87,56,54,11);
usort($a, "my_sort");


for($x=0; $x<count($a); $x++)
{
    var_dump($a[$x]);
}

输出结果为:

D:\Program Files (x86)\360\skylar6\php>php 1.php
int(11)
int(55)
int(57)
int(87)
int(12)
int(22)
int(54)
int(56)

参考

相关文章

  • 关于php中usort函数的解读

    最近学习遇到自定义数组排序函数usort()有些不了解,搜了很多地方都没有很好的解释,自己研究了一下定义和用法us...

  • 深入理解php--01

    1.使用Usort()函数可按数值对一个多维数组进行排序;Usort(),可保存排序中的关键字;Uksort(),...

  • 由一些小问题引发的思考

    如何判断数组是否为空? c++实现 php实现 关于PHP的empty函数php-manual中这样解释:一下情况...

  • php sort

    在php中自带了大量了数组排序函数,下面我们一一来介绍一下关于php数组排序的用法吧。 sort() 函数用于对数...

  • php中的匿名函数和闭包

    php中的匿名函数和闭包(closure) 一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函...

  • 揭开socket的神秘面纱

    php中socket的应用 php中socket函数 函数名 描述 socket_accept() 接受一个Soc...

  • PHP函数式编程

    一、函数简介 1.PHP中的函数就是完成某些功能的代码段2.PHP中的函数分为系统函数和自定义函数 二、自定义函数...

  • 解决scandir() has been disabled

    vim php.ini 将scandir()函数从PHP的配置文件中的禁用函数里面删除,重启php-fpm和nginx

  • arrat_walk 做 循环处理 2018-05-22

    PHP array_walk() 函数 PHP Array 函数 实例 对数组中的每个元素应用用户自定义函数: f...

  • 真正力量来自它的函数:PHP拥有超过 1000 个内建的函数

    PHP用户定义函数:除了内建的 PHP 函数,我们可以创建我们自己的函数。 函数是可以在程序中重复使用的语句块。 ...

网友评论

      本文标题:关于php中usort函数的解读

      本文链接:https://www.haomeiwen.com/subject/altrmxtx.html