看着标题很绕口,大致讲解一下。
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); ?>
这个看来得背下来了~~~~