php如何将KB/MB/GB/TB等转换为字节B
墨初 编程开发 971阅读
上篇文章写了一下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) }