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

    欢迎留言指教

  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/picaso/p/2673635.html
Copyright © 2011-2022 走看看