protected static function encodeArrayVariable(array $variable, array $value, $operator, $separator, &$useQueryString)
    {
        $isAssociativeArray = self::isAssociative($variable);
        $keyValuePairs = [];

        foreach ($variable as $key => $var) {
            if ($isAssociativeArray) {
                $key = rawurlencode($key);
                $isNestedArray = is_array($var);
            } else {
                $isNestedArray = false;
            }

            if (!$isNestedArray) {
                $var = rawurlencode($var);
                if ($operator === '+' || $operator === '#') {
                    $var = self::decodeReservedDelimiters($var);
                }
            }

            if ($value['modifier'] === '*') {
                if ($isAssociativeArray) {
                    if ($isNestedArray) {
                        // allow for deeply nested structures
                        $var = strtr(http_build_query([$key => $var]), ['+' => '%20', '%7e' => '~']);
                    } else {
                        $var = $key . '=' . $var;
                    }
                } elseif ($key > 0 && $useQueryString) {
                    $var = $value['value'] . '=' . $var;
                }
            }

            $keyValuePairs[$key] = $var;
        }

        $expanded = '';
        if (empty($variable)) {
            $useQueryString = false;
        } elseif ($value['modifier'] === '*') {
            $expanded = implode($separator, $keyValuePairs);
            if ($isAssociativeArray) {
                // Don't prepend the value name when using the explode modifier with an associative array
                $useQueryString = false;
            }
        } else {
            if ($isAssociativeArray) {
                // The result must be a comma separated list of keys followed by their respective values
                // if the explode modifier is not set on an associative array
                foreach ($keyValuePairs as $k => &$v) {
                    $v = $k . ',' . $v;
                }
            }
            $expanded = implode(',', $keyValuePairs);
        }

        return $expanded;
    }
protected static function encodeArrayVariable(array $variable, array $value, $operator, $separator, &$useQueryString)
    {
        $isAssociativeArray = self::isAssociative($variable);
        $keyValuePairs = [];

        foreach ($variable as $key => $var) {
            if ($isAssociativeArray) {
                $key = rawurlencode($key);
                $isNestedArray = is_array($var);
            } else {
                $isNestedArray = false;
            }

            if (!$isNestedArray) {
                $var = rawurlencode($var);
                if ($operator === '+' || $operator === '#') {
                    $var = self::decodeReservedDelimiters($var);
                }
            }

            if ($value['modifier'] === '*') {
                if ($isAssociativeArray) {
                    if ($isNestedArray) {
                        // allow for deeply nested structures
                        $var = strtr(http_build_query([$key => $var]), ['+' => '%20', '%7e' => '~']);
                    } else {
                        $var = $key . '=' . $var;
                    }
                } elseif ($key > 0 && $useQueryString) {
                    $var = $value['value'] . '=' . $var;
                }
            }

            $keyValuePairs[$key] = $var;
        }

        $expanded = '';
        if (empty($variable)) {
            $useQueryString = false;
        } elseif ($value['modifier'] === '*') {
            $expanded = implode($separator, $keyValuePairs);
            if ($isAssociativeArray) {
                // Don't prepend the value name when using the explode modifier with an associative array
                $useQueryString = false;
            }
        } else {
            if ($isAssociativeArray) {
                // The result must be a comma separated list of keys followed by their respective values
                // if the explode modifier is not set on an associative array
                foreach ($keyValuePairs as $k => &$v) {
                    $v = $k . ',' . $v;
                }
            }
            $expanded = implode(',', $keyValuePairs);
        }

        return $expanded;
    }
protected static function encodeArrayVariable ( array $ variable , array $ value , $ operator , $ separator , & $ useQueryString ) { $ isAssociativeArray = self :: isAssociative ( $ variable ) ; $ keyValuePairs = [ ] ; foreach ( $ variable as $ key => $ var ) { if ( $ isAssociativeArray ) { $ key = rawurlencode ( $ key ) ; $ isNestedArray = is_array ( $ var ) ; } else { $ isNestedArray = false ; } if ( ! $ isNestedArray ) { $ var = rawurlencode ( $ var ) ; if ( $ operator === '+' || $ operator === '#' ) { $ var = self :: decodeReservedDelimiters ( $ var ) ; } } if ( $ value [ 'modifier' ] === '*' ) { if ( $ isAssociativeArray ) { if ( $ isNestedArray ) { // allow for deeply nested structures $ var = strtr ( http_build_query ( [ $ key => $ var ] ) , [ '+' => '%20' , '%7e' => '~' ] ) ; } else { $ var = $ key . '=' . $ var ; } } elseif ( $ key > 0 && $ useQueryString ) { $ var = $ value [ 'value' ] . '=' . $ var ; } } $ keyValuePairs [ $ key ] = $ var ; } $ expanded = '' ; if ( empty ( $ variable ) ) { $ useQueryString = false ; } elseif ( $ value [ 'modifier' ] === '*' ) { $ expanded = implode ( $ separator , $ keyValuePairs ) ; if ( $ isAssociativeArray ) { // Don't prepend the value name when using the explode modifier with an associative array $ useQueryString = false ; } } else { if ( $ isAssociativeArray ) { // The result must be a comma separated list of keys followed by their respective values // if the explode modifier is not set on an associative array foreach ( $ keyValuePairs as $ k => & $ v ) { $ v = $ k . ',' . $ v ; } } $ expanded = implode ( ',' , $ keyValuePairs ) ; } return $ expanded ; }
Encode arrays for use in the expanded URI string

@param array $variable
@param array $value
@param string $operator
@param string $separator
@param $useQueryString
@return string
Encode arrays for use in the expanded URI string