private static function parseQualityAndParameters(array $fields)
{
$quality = 1;
$qParamFound = false;
$parameters = null;
$extensions = null;
$count = count($fields);
for ($idx = 1; $idx < $count; ++$idx) {
if (empty($fields[$idx]) === true) {
continue;
}
if (strpos($fields[$idx], '=') === false) {
throw new InvalidArgumentException('mediaType');
}
list($key, $value) = explode('=', $fields[$idx], 2);
$key = trim($key);
$value = trim($value, ' "');
// 'q' param separates media parameters from extension parameters
if ($key === 'q' && $qParamFound === false) {
$quality = (double) $value;
$qParamFound = true;
continue;
}
$qParamFound === false ? $parameters[$key] = $value : ($extensions[$key] = $value);
}
return [$parameters, $quality, $extensions];
}