有没有一个简单的方法可以从“256M”,“180K”,“4G”等字符串转换成整数等价物?

前端之家收集整理的这篇文章主要介绍了有没有一个简单的方法可以从“256M”,“180K”,“4G”等字符串转换成整数等价物?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要测试由ini_get(‘memory_limit’)返回的值,如果它低于某个阈值,则增加内存限制,但是这个ini_get(‘memory_limit’)调用返回字符串值,如“128M”,而不是整数.

我知道我可以编写一个函数来解析这些字符串(将事件和尾随’B’考虑在内),因为我已经写了很多次:

function int_from_bytestring ($byteString) {
  preg_match('/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i',$byteString,$matches);
  $num = (float)$matches[1];
  switch (strtoupper($matches[2])) {
    case 'E':
      $num = $num * 1024;
    case 'P':
      $num = $num * 1024;
    case 'T':
      $num = $num * 1024;
    case 'G':
      $num = $num * 1024;
    case 'M':
      $num = $num * 1024;
    case 'K':
      $num = $num * 1024;
  }

  return intval($num);
}

然而,这很繁琐,这似乎是PHP中已经存在的随机事情之一,尽管我从未找到过.有没有人知道一些内置的方法来解析这些字节量字符串?

我觉得你没有运气. ini_get()PHP手册实际上解决了一个关于ini_get()如何返回ini值的警告的具体问题.

他们在其中一个例子中提供了一个功能来做到这一点,所以我猜这是要走的路:

function return_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    switch($last) {
        // The 'G' modifier is available since PHP 5.1.0
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }

    return $val;
}

他们有关于上述功能的说法:“上面的例子显示了将速记符号转换为字节的一种方式,就像PHP代码一样.

猜你在找的PHP相关文章