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

本文深入解析PHP中的usort函数用法,通过实现文件大小排序的自定义函数sortSize,并调用getByteSize进行单位转换,演示如何高效地对数组元素进行排序。同时提供对比原始代码与去引用后的代码片段,帮助开发者更好地理解和实践数组排序技巧。

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

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值