public static function parseContentNegotiationQualityValues(string $rawValues): array
    {
        $acceptedTypes = array_map(
            function ($acceptType) {
                $typeAndQuality = preg_split('/;\s*q=/', $acceptType);

                return [$typeAndQuality[0], (isset($typeAndQuality[1]) ? (float)$typeAndQuality[1] : '')];
            }, preg_split('/,\s*/', $rawValues)
        );

        $flattenedAcceptedTypes = [];
        $valuesWithoutQualityValue = [[], [], [], []];
        foreach ($acceptedTypes as $typeAndQuality) {
            if ($typeAndQuality[1] === '') {
                $parsedType = MediaTypes::parseMediaType($typeAndQuality[0]);
                if ($parsedType['type'] === '*') {
                    $valuesWithoutQualityValue[3][$typeAndQuality[0]] = true;
                } elseif ($parsedType['subtype'] === '*') {
                    $valuesWithoutQualityValue[2][$typeAndQuality[0]] = true;
                } elseif ($parsedType['parameters'] === []) {
                    $valuesWithoutQualityValue[1][$typeAndQuality[0]] = true;
                } else {
                    $valuesWithoutQualityValue[0][$typeAndQuality[0]] = true;
                }
            } else {
                $flattenedAcceptedTypes[$typeAndQuality[0]] = $typeAndQuality[1];
            }
        }
        $valuesWithoutQualityValue = array_merge(array_keys($valuesWithoutQualityValue[0]), array_keys($valuesWithoutQualityValue[1]), array_keys($valuesWithoutQualityValue[2]), array_keys($valuesWithoutQualityValue[3]));
        arsort($flattenedAcceptedTypes);
        $parsedValues = array_merge($valuesWithoutQualityValue, array_keys($flattenedAcceptedTypes));

        return $parsedValues;
    }
public static function parseContentNegotiationQualityValues(string $rawValues): array
    {
        $acceptedTypes = array_map(
            function ($acceptType) {
                $typeAndQuality = preg_split('/;\s*q=/', $acceptType);

                return [$typeAndQuality[0], (isset($typeAndQuality[1]) ? (float)$typeAndQuality[1] : '')];
            }, preg_split('/,\s*/', $rawValues)
        );

        $flattenedAcceptedTypes = [];
        $valuesWithoutQualityValue = [[], [], [], []];
        foreach ($acceptedTypes as $typeAndQuality) {
            if ($typeAndQuality[1] === '') {
                $parsedType = MediaTypes::parseMediaType($typeAndQuality[0]);
                if ($parsedType['type'] === '*') {
                    $valuesWithoutQualityValue[3][$typeAndQuality[0]] = true;
                } elseif ($parsedType['subtype'] === '*') {
                    $valuesWithoutQualityValue[2][$typeAndQuality[0]] = true;
                } elseif ($parsedType['parameters'] === []) {
                    $valuesWithoutQualityValue[1][$typeAndQuality[0]] = true;
                } else {
                    $valuesWithoutQualityValue[0][$typeAndQuality[0]] = true;
                }
            } else {
                $flattenedAcceptedTypes[$typeAndQuality[0]] = $typeAndQuality[1];
            }
        }
        $valuesWithoutQualityValue = array_merge(array_keys($valuesWithoutQualityValue[0]), array_keys($valuesWithoutQualityValue[1]), array_keys($valuesWithoutQualityValue[2]), array_keys($valuesWithoutQualityValue[3]));
        arsort($flattenedAcceptedTypes);
        $parsedValues = array_merge($valuesWithoutQualityValue, array_keys($flattenedAcceptedTypes));

        return $parsedValues;
    }
public static function parseContentNegotiationQualityValues ( string $ rawValues ) : array { $ acceptedTypes = array_map ( function ( $ acceptType ) { $ typeAndQuality = preg_split ( '/;\s*q=/' , $ acceptType ) ; return [ $ typeAndQuality [ 0 ] , ( isset ( $ typeAndQuality [ 1 ] ) ? ( float ) $ typeAndQuality [ 1 ] : '' ) ] ; } , preg_split ( '/,\s*/' , $ rawValues ) ) ; $ flattenedAcceptedTypes = [ ] ; $ valuesWithoutQualityValue = [ [ ] , [ ] , [ ] , [ ] ] ; foreach ( $ acceptedTypes as $ typeAndQuality ) { if ( $ typeAndQuality [ 1 ] === '' ) { $ parsedType = MediaTypes :: parseMediaType ( $ typeAndQuality [ 0 ] ) ; if ( $ parsedType [ 'type' ] === '*' ) { $ valuesWithoutQualityValue [ 3 ] [ $ typeAndQuality [ 0 ] ] = true ; } elseif ( $ parsedType [ 'subtype' ] === '*' ) { $ valuesWithoutQualityValue [ 2 ] [ $ typeAndQuality [ 0 ] ] = true ; } elseif ( $ parsedType [ 'parameters' ] === [ ] ) { $ valuesWithoutQualityValue [ 1 ] [ $ typeAndQuality [ 0 ] ] = true ; } else { $ valuesWithoutQualityValue [ 0 ] [ $ typeAndQuality [ 0 ] ] = true ; } } else { $ flattenedAcceptedTypes [ $ typeAndQuality [ 0 ] ] = $ typeAndQuality [ 1 ] ; } } $ valuesWithoutQualityValue = array_merge ( array_keys ( $ valuesWithoutQualityValue [ 0 ] ) , array_keys ( $ valuesWithoutQualityValue [ 1 ] ) , array_keys ( $ valuesWithoutQualityValue [ 2 ] ) , array_keys ( $ valuesWithoutQualityValue [ 3 ] ) ) ; arsort ( $ flattenedAcceptedTypes ) ; $ parsedValues = array_merge ( $ valuesWithoutQualityValue , array_keys ( $ flattenedAcceptedTypes ) ) ; return $ parsedValues ; }
Parses a RFC 2616 content negotiation header field by evaluating the Quality
Values and splitting the options into an array list, ordered by user preference.

@param string $rawValues The raw Accept* Header field value
@return array The parsed list of field values, ordered by user preference
Parses a RFC 2616 content negotiation header field by evaluating the Quality Values and splitting the options into an array list ordered by user preference .