hi,欢迎访问本站!
当前位置: 首页编程开发正文

php如何将KB/MB/GB/TB等转换为字节B

墨初 编程开发 373阅读

上篇文章写了一下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) }
声明:无特别说明,转载请标明本文来源!
相关推荐