usort
(PHP 4, PHP 5)
usort — 即使用用户自定义的比较函数对数组中的值进行排序
bool usort ( array &$array , callback $cmp_function )
本函数将用用户自定义的比较函数对一个数组中的值进行排序。
如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。
是不是理解起来有点难度?
来看一道题:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:数组中的数字两两拼接,比较正序拼接和倒序拼接的大小,如果倒序拼接所得值更小交换位置,重复此过程,直到得到最小拼接序列。
一般解法:
function PrintMinNumber($numbers)
{
$length=count($numbers);
for($i=0;$i<$length;$i++){
for($j=0;$j<$length-1-$i;$j++){
$a=$numbers[$j].$numbers[$j+1];
$b=$numbers[$j+1].$numbers[$j];
if($a>$b){
$temp=$numbers[$j];
$numbers[$j]=$numbers[$j+1];
$numbers[$j+1]=$temp;
}
}
}
return implode("",$numbers);
}
使用usort解法:
function PrintMinNumber($numbers)
{
/*function中的排序规则对number数组中数据两两生效*/
usort($numbers,
function($a,$b){
if("$a$b" > "$b$a") return 1;
return -1;}
);
/*如果function返回值为true则交换参数顺序,否则不发生变化*/
return implode("",$numbers);
}