关于php中usort函数的解读

最近学习遇到自定义数组排序函数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

结果为:

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

输出结果为:

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函数的解读)