protected function buildQuery(array $data, $separator, $key = null)
    {
        $query = array();
        foreach ($data as $name => $value) {
            if ($this->getOption(self::OPTION_ENCODE_KEYS) === true) {
                $name = rawurlencode($name);
            }
            if ($key !== null) {
                if ($this->getOption(self::OPTION_USE_BRACKETS) === true) {
                    $name = $key . '[' . $name . ']';
                } else {
                    $name = $key;
                }
            }
            if (is_array($value)) {
                $query[] = $this->buildQuery($value, $separator, $name);
            } else {
                $query[] = $name . '=' . rawurlencode($value);
            }
        }
        return implode($separator, $query);
    }
protected function buildQuery(array $data, $separator, $key = null)
    {
        $query = array();
        foreach ($data as $name => $value) {
            if ($this->getOption(self::OPTION_ENCODE_KEYS) === true) {
                $name = rawurlencode($name);
            }
            if ($key !== null) {
                if ($this->getOption(self::OPTION_USE_BRACKETS) === true) {
                    $name = $key . '[' . $name . ']';
                } else {
                    $name = $key;
                }
            }
            if (is_array($value)) {
                $query[] = $this->buildQuery($value, $separator, $name);
            } else {
                $query[] = $name . '=' . rawurlencode($value);
            }
        }
        return implode($separator, $query);
    }
protected function buildQuery ( array $ data , $ separator , $ key = null ) { $ query = array ( ) ; foreach ( $ data as $ name => $ value ) { if ( $ this -> getOption ( self :: OPTION_ENCODE_KEYS ) === true ) { $ name = rawurlencode ( $ name ) ; } if ( $ key !== null ) { if ( $ this -> getOption ( self :: OPTION_USE_BRACKETS ) === true ) { $ name = $ key . '[' . $ name . ']' ; } else { $ name = $ key ; } } if ( is_array ( $ value ) ) { $ query [ ] = $ this -> buildQuery ( $ value , $ separator , $ name ) ; } else { $ query [ ] = $ name . '=' . rawurlencode ( $ value ) ; } } return implode ( $ separator , $ query ) ; }
A simple version of http_build_query in userland. The encoded string is
percentage encoded according to RFC 3986.

@param array  $data      An array, which has to be converted into
QUERY_STRING. Anything is possible.
@param string $separator Separator {@link self::OPTION_SEPARATOR_OUTPUT}
@param string $key       For stacked values (arrays in an array).

@return string
A simple version of http_build_query in userland . The encoded string is percentage encoded according to RFC 3986 .