PHP算法——文件大小排序(KB、MB、GB、TB)

在学校呆着没意思,重温了一下PHP,看看以前写过的函数,突然想写一下已知文件大小,对数据排序。

比如: 1.3G、153MB、458KB、998M、0.99G(这里未考虑MB与Mb的区别,一般不会涉及Mb的运算,所以Mb、MB、mb都看定为Mb,其实MB=8*Mb)

函数如下:

<?php
 
     function sortSize($arr){
         $arr2 = $arr;
         $arr3 = array();
         if(!is_array($arr)){
             return false;
         }
         array_walk($arr,'getByteSize');
         asort($arr);
         foreach($arr as $key=>$value){
             $arr3[] = $arr2[$key];
         }
         return $arr3;
     }
     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');
     print_r(sortSize($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/2673635.html