zoukankan      html  css  js  c++  java
  • 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);
     
     ?>

     

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

  • 相关阅读:
    卧槽!缓存的问题太多了(雪崩、击穿、穿透…)一个个解决!
    Java 命名规范(非常全面,可以收藏)
    一次接口超时排查,花费了我两个星期。。
    LiveGBS和海康威视
    SQLite文件存储和读取
    Vue页面刷新原理:Cesium刷新机制
    MBtiles格式数据
    gitee:403错误
    uniapp是什么?
    HBuilderx怎么运行代码
  • 原文地址:https://www.cnblogs.com/picaso/p/2673726.html
Copyright © 2011-2022 走看看