PHP经验——usort使用函数中调用引用函数的出错问题

时间:2022-09-30 16:02:18

看着标题很绕口,大致讲解一下。

usort函数用法如下:

bool usort ( array &$array , callback $cmp_function )

第一个参数是一个数组(引用),第二个参数是要自定义的排序函数。

我自己写了一个给文件大小排序的函数,使用usort,名为sortSize(),而sortSize又要调用另一个引用函数getByteSize(),示意图如下

PHP经验——usort使用函数中调用引用函数的出错问题

出错源代码:

<?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经验——usort使用函数中调用引用函数的出错问题

 

去掉引用:

<?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);

?>

PHP经验——usort使用函数中调用引用函数的出错问题

 

这个看来得背下来了~~~~