src/Http/ServerRequest.php
public function withQueryParams(array $query): ServerRequestInterface
    {
        $this->uri = $this->uri->withQuery(implode('&', $query));

        return $this;
    }
public function withQueryParams(array $query): ServerRequestInterface
    {
        $this->uri = $this->uri->withQuery(implode('&', $query));

        return $this;
    }
Return an instance with the specified query string arguments.
These values SHOULD remain immutable over the course of the incoming
request. They MAY be injected during instantiation, such as from PHP's
$_GET superglobal, or MAY be derived from some other value such as the
URI. In cases where the arguments are parsed from the URI, the data
MUST be compatible with what PHP's parse_str() would return for
purposes of how duplicate query parameters are handled, and how nested
sets are handled.
Setting query string arguments MUST NOT change the URI stored by the
request, nor the values in the server params.
This method MUST be implemented in such a way as to retain the
immutability of the message, and MUST return an instance that has the
updated query string arguments.

@param array $query Array of query string arguments, typically from
$_GET.
@return ServerRequestInterface
@throws InvalidArgumentException