看着标题很绕口,大致讲解一下。
usort函数用法如下:
bool usort ( array &$array
, callback $cmp_function
)
第一个参数是一个数组(引用),第二个参数是要自定义的排序函数。
我自己写了一个给文件大小排序的函数,使用usort,名为sortSize(),而sortSize又要调用另一个引用函数getByteSize(),示意图如下
出错源代码:
<?php
function sortSize($a,$b){
$a = getByteSize($a);
$b = getByteSize($b);
if($a == $b){
return 0;
}
return ($a>$b)? 1 : -1;
}
function getByteSize(&$size){
$base = array(array('KB','K'),array('MB','M'),array('GB','G'),array('TB','T'));
$sum = 1;
for($i=0; $i<4; $i++){
if(stripos($size,$base[$i][0]) || stripos($size,$base[$i][1])){
$size = $sum*str_ireplace($base[$i],'',$size)*1024;
break;
}
$sum*=1024;
}
}
$arr = array('23M','1.02G','987MB','45MB','0.98G');
usort($arr,'sortSize');
print_r($arr);
?>
去掉引用:
<?php
function sortSize($a,$b){
$a = getByteSize($a);
$b = getByteSize($b);
if($a == $b){
return 0;
}
return ($a>$b)? 1 : -1;
}
function getByteSize($size){
$base = array(array('KB','K'),array('MB','M'),array('GB','G'),array('TB','T'));
$sum = 1;
for($i=0; $i<4; $i++){
if(stripos($size,$base[$i][0]) || stripos($size,$base[$i][1])){
$size = $sum*str_ireplace($base[$i],'',$size)*1024;
break;
}
$sum*=1024;
}
return $size;
}
$arr = array('23M','1.02G','987MB','45MB','0.98G');
usort($arr,'sortSize');
print_r($arr);
?>
这个看来得背下来了~~~~