Parsers
The library provides the following classes to ease components parsing:
QueryParser
to parse and deserialize a query string.QueryBuilder
to build a query string from a collection of key/value pairs.
QueryParser::extract
<?php
public QueryParser::extract(string $query[, string $separator = '&' [, int $enc_type = PHP_QUERY_RFC3986]]): array
This method deserializes the query string parameters into an associative array
similar to PHP’s parse_str
when used with its optional second argument. This static public method expects the following arguments:
- The query string required;
- The query string separator optional, by default it is set to
&
; - The query string encoding. One of the
ComponentInterface
encoding type constant.
The main differences are with parse_str
usage are the following:
QueryParser::extract
accepts a parameter which describes the query string separatorQueryParser::extract
does not mangle the query string data.QueryParser::extract
is not affected by PHPmax_input_vars
.
<?php
use League\Uri\QueryParser;
$query_string = 'foo.bar=bar&foo_bar=baz';
parse_str($query_string, $out);
var_export($out);
// $out = ["foo_bar" => 'baz'];
$parser = new QueryParser();
$arr =$parser->extract($query_string);
// $arr = ['foo.bar' => 'bar', 'foo_bar' => baz'];
<?php
use League\Uri;
$query_string = 'foo.bar=bar&foo_bar=baz';
parse_str($query_string, $out);
var_export($out);
// $out = ["foo_bar" => 'baz'];
$arr = Uri\extract_query($query_string);
// $arr = ['foo.bar' => 'bar', 'foo_bar' => baz'];
QueryParser::parse
<?php
public QueryParser::parse(string $query[, string $separator = '&' [, int $enc_type = PHP_QUERY_RFC3986]]): array
This method parse the query string into an associative array
of key/values pairs. The method expects three (3) arguments:
- The query string required;
- The query string separator optional, by default it is set to
&
; - The query string encoding. One of the
ComponentInterface
encoding type constant.
The value returned for each pair can be:
null
,- a
string
- an array of
string
and/ornull
values.
<?php
use League\Uri;
$parser = new QueryParser();
$query_string = 'toto.foo=bar&toto.foo=baz&foo&baz=';
$arr = $parser->parse($query_string, '&');
// [
// "toto.foo" => ["bar", "baz"],
// "foo" => null,
// "baz" => "",
// ]
<?php
use League\Uri;
$query_string = 'toto.foo=bar&toto.foo=baz&foo&baz=';
$arr = Uri\parse_query($query_string, '&');
// [
// "toto.foo" => ["bar", "baz"],
// "foo" => null,
// "baz" => "",
// ]
QueryParser::convert
<?php
public QueryParser::convert(iterable $pairs): array
//function alias
function pairs_to_params(iterable $pairs): array
The QueryParser::convert
deserializes a collection of query string key/value pairs into an associative array similar to PHP’s parse_str
when used with its optional second argument. This method expects a single argument which represents the collection of key/value pairs as an iterable construct.
The main differences are with parse_str
usage are the following:
QueryParser::extract
accepts a parameter which describes the query string separatorQueryParser::extract
does not mangle the query string data.QueryParser::extract
is not affected by PHPmax_input_vars
.
You can also use the function alias which is Uri\pairs_to_params
.
<?php
use League\Uri;
$parser = new Uri\QueryParser();
$arr = $parser->convert(['foo.bar' => ['2', 3, true]]);
//or
$arr = Uri\pairs_to_params(['foo.bar' => ['2', 3, true]]);
//in both cases $arr = ['foo.bar' => 'true'];
QueryBuilder::build
<?php
public QueryBuilder::build(iterable $pairs[, string $separator = '&' [, int $enc_type = PHP_QUERY_RFC3986]]): array
The QueryBuilder::build
restores the query string from the result of the QueryBuilder::parse
method. The method expects at most 3 arguments:
- A valid
iterable
of key/value pairs to convert; - The query string separator, by default it is set to
&
; - The query string encoding using one of the
ComponentInterface
constant
<?php
use League\Uri\QueryBuilder;
use League\Uri\QueryParser;
$builder = new QueryBuilder();
$parser = new QueryParser();
$query_string = 'foo[]=bar&foo[]=baz';
$arr = $parser->parse($query_string, '&', Query::RFC3986_ENCODING);
// $arr include the following data ["foo[]" => ['bar', 'baz']];
$res = $builder->build($arr, '&', false);
// $res = 'foo[]=bar&foo[]=baz'
<?php
use League\Uri;
$query_string = 'foo[]=bar&foo[]=baz';
$arr = Query::parse($query_string, '&', Query::RFC3986_ENCODING);
var_export($arr);
// $arr include the following data ["foo[]" => ['bar', 'baz']];
$res = Uri\build_query($arr, '&', false);
// $res = 'foo[]=bar&foo[]=baz'