php如何将KB/MB/GB/TB等转换为字节B
墨初 编程开发 625阅读
上篇文章写了一下php将字节转为KB,MB,GB,TB的方法,那么这篇博文再写一下KB,MB,GB,TB转为字节的方法。
PHP将KB MB GB TB等转换为字节的方法
方法1:
/** * @name 将KB,MB,GB,TB,PB 转为字节 * @param string $from 带有单位的 大小如:10kb,15mb * * @return int 转换后以字节为单位的数值 * @host https://www.73so.com */ function convertToBytes($from) { $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; $number = substr($from, 0, -2); $suffix = strtoupper(substr($from,-2)); if(is_numeric(substr($suffix, 0, 1))) { return preg_replace('/[^\d]/', '', $from); } $exponent = array_flip($units)[$suffix] ?? null; if($exponent === null) { return null; } return $number * (1024 ** $exponent); } var_dump(array_map('convertToBytes', array("13", "13B", "13KB", "10.5KB", "123mb"))); // array(5) { [0]=> string(2) "13" [1]=> string(2) "13" [2]=> int(13312) [3]=> float(10752) [4]=> int(128974848) }
方法2:
注意:下面的方法不支持带有单个B(字节)单位或不带单位的的传入参数,参考下面函数的使用示例即可!
/** * @name 将KB,MB,GB,TB,PB 转为字节 * @param string $from 带有单位的 大小如:10kb,15mb * * @return int 转换后以字节为单位的数值 * @host https://www.73so.com */ function formatToBytes ($size) { $aUnits = array('bytes' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4); $sUnit = strtoupper(trim(substr($size, -2))); if (intval($sUnit) !== 0) { $sUnit = 'bytes'; } if (!in_array($sUnit, array_keys($aUnits))) { return false; } $iUnits = trim(substr($size, 0, strlen($size) - 2)); if (!intval($iUnits) == $iUnits) { return false; } return $iUnits * pow(1024, $aUnits[$sUnit]); } var_dump(array_map('formatToBytes', array("13", "13B", "13KB", "10.5KB", "123mb"))); // array(5) { [0]=> int(0) [1]=> int(1) [2]=> int(13312) [3]=> float(10752) [4]=> int(128974848) }
方法3:
function ConvertUserStrToBytes($str) { $str = trim($str); $num = (double)$str; if (strtoupper(substr($str, -1)) == "B") $str = substr($str, 0, -1); switch (strtoupper(substr($str, -1))) { case "P": $num *= 1024; case "T": $num *= 1024; case "G": $num *= 1024; case "M": $num *= 1024; case "K": $num *= 1024; } return $num; } var_dump(array_map('ConvertUserStrToBytes', array("13", "13B", "13KB", "10.5KB", "123mb"))); // array(5) { [0]=> float(13) [1]=> float(13) [2]=> float(13312) [3]=> float(10752) [4]=> float(128974848) }