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

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

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

 

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

原文地址:https://www.cnblogs.com/picaso/p/2673726.html