php-usort函数笔记
usort函数官方文档
说明
usort ( array &$array , callable $value_compare_func ) : bool
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
Note:
如果两个成员比较为相等,则它们在排序数组中的相对顺序未定义。
Note: 此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。
参数
array
输入的数组
cmp_function
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
callback ( mixed $a, mixed $b ) : int
警告:从比较函数返回非整数值(如float)将导致回调返回值的内部强制转换为整数。因此,0.99和0.1这样的值都将被转换为0的整数值,这将比较这些值,使其相等。
返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。
官方文档里没有说明cmp_function函数返回小于,等于或大于 0 的整数时,会对array的比较值会做如何操作.
测试脚本
function cmp( $a, $b ) {
if( $a === $b ) return 0;
return $a < $b? 1: -1;
}
$list = [5,2,3,6,4,7,8,1,9,0];
$list = [5,2];
var_dump( $list );
usort( $list, 'cmp' );
var_dump( $list );
执行
$>php test.php
array(2) {
[0]=>
int(5)
[1]=>
int(2)
}
array(2) {
[0]=>
int(5)
[1]=>
int(2)
}
总结
cmp_function
函数返回大于0
值得整数时才会最array
的比较值$a,$b
的位置进行调换.
需要大到小排序时,在$a<$b
时返回1
.反过来就是小到大排序.
经年痴心妄想,一朝走火入魔。