PHP 使用用户自定义的比较函数对数组元素排序

时间:2022-03-21 09:41:17

usort()函数使用用户自定义比较函数对数组中对元素进行排序,如果排序的数组需要使用不寻常的标准来进行排序,我们就使用该函数.


下面我直接贴出我的代码,在代码中我会有一个详细的注释.

1.对一维数组使用自定义函数进行排序.

//定义一个一维数组
$array = [5,6,9,3,10];

//自定义比较函数,比较函数有两个参数,参数的意义是数组中的某个元素的键值.比
//较函数中数组的元素键值比较,必须返回一个大于,小于或者等于0的整数
function rank($a,$b){
//如果$a元素小于$b元素
//如果是按照升序的排列,应该返回一个负整数,代表将小的元素放在前面
//如果是按照升序的降序,应该返回一个正整数,代表将大的元素放在前面
if($a < $b){
return -1;
}elseif ($a > $b){
//如果$a 大于 $b
//如果按照升序排列,应该返回一个正整数.
//如果按照降序排列,就返回一个负整数.
return 1;
}else{
//如果$a = $b,返回0
return 0;
}
}

//我们使用usort函数调用自定义排序函数,对数组进行排序,usrot函数是对数组元素赋予了新的键名.旧的键名被删除。
//第二个参数是回调函数,就是我们自定义的排序函数.
usort($array,'rank');
var_dump($array);

二.对二维数组进行排序,按照不寻常对数组进行排序.

<?php
//定义一个二维数组
$array = [['count'=>5],['count'=>3],['count'=>9],['count'=>6],['count'=>15]];
var_dump($array);
//自定义排序函数,我们按照索引数组键值中每个关联数组中count索引名的键值进行排序。
//前面已经说过了,自定义排序函数的参数是数组的某个元素的键值.
function rank($a,$b){
if($a['count'] < $b['count']){
return -1;
}elseif ($a['count'] > $b['count']){
return 1;
}else{
return 0;
}
}

//使用usort函数调用自定义的排序函数,进行排序
usort($array,'rank');
var_dump($array);

注意:使用自定义比较函数进行排序,两个参数排序,必须返回一个正整数或者负整数,或者0,usort函数使用自定义函数进行排序,是将旧键名删除,重新赋与键值新的键名,而不是将键名排序.