¿Existe una forma fácil en PHP para convertir de cadenas como '256M', '180K', '4G' a sus equivalentes enteros?

Necesito probar el valor devuelto porini_get('memory_limit') y aumente el límite de memoria si está por debajo de un cierto umbral, sin embargo estoini_get('memory_limit') call devuelve valores de cadena como '128M' en lugar de enteros.

Sé que puedo escribir una función para analizar estas cadenas (teniendo en cuenta el caso y el final de 'B'), ya que las he escrito varias veces:

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);
}

Sin embargo, esto se vuelve tedioso y parece una de esas cosas aleatorias que ya existirían en PHP, aunque nunca lo encontré. ¿Alguien sabe de alguna forma incorporada para analizar estas cadenas de bytes?

Respuestas a la pregunta(5)

Su respuesta a la pregunta