src/ParseQualityHeaders.php
public function parseArrayOfQualityHeaders(?array $headers) : ?array
    {
        $r = null;

        if ($headers !== null) {
            $indexQuality = [];
            $qualitIncreasse = 100;

            foreach ($headers as $rawPart) {
                $rawPart = str_replace("; q=", ";q=", $rawPart);
                list($value, $quality) = array_merge(explode(";q=", $rawPart), [1]);
                
                $value = trim($value);
                $quality = trim((string)$quality);

                $indexQuality[] = (float)$quality + $qualitIncreasse;
                $r[] = ["value" => $value, "quality" => (float)$quality];

                $qualitIncreasse--;
            }

            array_multisort($indexQuality, SORT_DESC, $r);
        }

        return $r;
    }
public function parseArrayOfQualityHeaders(?array $headers) : ?array
    {
        $r = null;

        if ($headers !== null) {
            $indexQuality = [];
            $qualitIncreasse = 100;

            foreach ($headers as $rawPart) {
                $rawPart = str_replace("; q=", ";q=", $rawPart);
                list($value, $quality) = array_merge(explode(";q=", $rawPart), [1]);
                
                $value = trim($value);
                $quality = trim((string)$quality);

                $indexQuality[] = (float)$quality + $qualitIncreasse;
                $r[] = ["value" => $value, "quality" => (float)$quality];

                $qualitIncreasse--;
            }

            array_multisort($indexQuality, SORT_DESC, $r);
        }

        return $r;
    }
Trata os valores de headers marcados com parametros "quality" que
identificam a preferência de algum tipo de conteúdo ou comportamento
sobre outro.

Retorna um array ordenado dos dados encontrados em ordem de preferência.
Valores em igual nível de preferência serão retornados alfabeticamente.

<pre>
$headers = [
"text/html",
"application/xhtml+xml",
"application/xml;q=0.9",
"* /*;q=0.8"
];

$return = [
// string   "value"     Valor real.
// float    "quality"   Nível da "qualidade" atribuido.
["value" => "text/html", "quality" => 1],
["value" => "application/xhtml+xml", "quality" => 1],
["value" => "application/xml", "quality" => 0.9],
["value" => "* /*", "quality" => 0.8]
];
</pre>

@param       ?array $headers
Valores do header em formato de array.

@return      ?array
O objeto de retorno é um array de arrays associativos
conforme exemplificado acima.