在学校呆着没意思,重温了一下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); ?>
欢迎留言指教