# http_build_query

(PHP 5, PHP 7, PHP 8)

http_build_query — Generar una cadena de consulta codificada estilo URL

### Descripción

http_build_query(
mixed `$query_data`,
string `$numeric_prefix` = ?,
string `$arg_separator` = ?,
int `$enc_type` = `PHP_QUERY_RFC1738`
): string

Genera una cadena de consulta codificada estilo URL a partir del array asociativo (o indexado) dado.

### Parámetros

`query_data`

  Puede ser un array u objeto que contenga propiedades.

  Si `query_data` es un array, puede ser de una dimensión, o un array de arrays (que a su vez puede contener otros arrays).

  Si `query_data` es un objeto, sólo las propiedades que son públicas serán incorporadas en el resultado.

`numeric_prefix`

  Si se usan índices numéricos en el array base y se provee este parámetro, éste será añadido al comienzo de los índices numéricos para aquellos elementos encontrados sólo en el array base.

  Esto significa tener en cuenta los nombres de variables legales cuando los datos sean decodificados por PHP u otra aplicación CGI más adelante.

`arg_separator`

  arg_separator.output se usa para separar argumentos, aunque podría ser sobrescrito especificando este parámetro.

`enc_type`

  Por omisión, `PHP_QUERY_RFC1738`.

  Si `enc_type` es `PHP_QUERY_RFC1738`, la codificación se realiza de acuerdo al » RFC 1738 y el tipo de medios `application/x-www-form-urlencoded`, lo que implica que los espacios son codificados con el signo más (`+`).

  Si `enc_type` es `PHP_QUERY_RFC3986`, la codificación se realiza de acuerdo al » RFC 3986, y los espacios serán codificados (`%20`) más.

### Valores devueltos

Devuelve una cadena codificada en forma URL.

### Historial de cambios

Versión | Descripción
--- | ---
5.4.0 | Se agregó el parámetro `enc_type`.
5.1.3 | Los corchetes cuadrados son escapados.
5.1.2 | Se agregó el parámetro `arg_separator`.

### Ejemplos

Ejemplo #1 Uso simple de http_build_query()

`<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&amp;');
?>`

El resultado del ejemplo sería:

    foo=bar&baz=boom&cow=milk&php=hypertext+processor
    foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor

Ejemplo #2 http_build_query() con elementos indexados numéricamente.

`<?php
$data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, 'myvar_');
?>`

El resultado del ejemplo sería:

    0=foo&1=bar&2=baz&3=boom&cow=milk&php=hypertext+processor
    myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor

Ejemplo #3 con arrays complejos http_build_query()

`<?php
$data = array('user'=>array('name'=>'Bob Smith',
'age'=>47,
'sex'=>'M',
'dob'=>'5/12/1956'),
'pastimes'=>array('golf', 'opera', 'poker', 'rap'),
'children'=>array('bobby'=>array('age'=>12,
'sex'=>'M'),
'sally'=>array('age'=>8,
'sex'=>'F')),
'CEO');
echo http_build_query($data, 'flags_');
?>`

esto generará la salida: (acotada por razones de legibilidad)

    user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M&
    user%5Bdob%5D=5%2F12%2F1956&pastimes%5B0%5D=golf&pastimes%5B1%5D=opera&
    pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&children%5Bbobby%5D%5Bage%5D=12&
    children%5Bbobby%5D%5Bsex%5D=M&children%5Bsally%5D%5Bage%5D=8&
    children%5Bsally%5D%5Bsex%5D=F&flags_0=CEO

> Nota:

> Sólo el elemento "CEO" indexado numéricamente el array base recibió un prefijo. Los otros índices numéricos, encontrados bajo los pasatiempos, no requieren un prefijo tipo cadena para ser nombres legales de variables.

Ejemplo #4 Uso de http_build_query() con un objeto

`<?php
class parentClass {
public $pub = 'publicParent';
protected $prot = 'protectedParent';
private $priv = 'privateParent';
public $pub_bar = Null;
protected $prot_bar = Null;
private $priv_bar = Null;
public function __construct(){
$this->pub_bar = new childClass();
$this->prot_bar = new childClass();
$this->priv_bar = new childClass();
}
}
class childClass {
public $pub = 'publicChild';
protected $prot = 'protectedChild';
private $priv = 'privateChild';
}
$parent = new parentClass();
echo http_build_query($parent);
?>`

El resultado del ejemplo sería:

    pub=publicParent&pub_bar%5Bpub%5D=publicChild

### Ver también

- parse_str() - Convierte el string en variables
- parse_url() - Analiza un URL y devuelve sus componentes
- urlencode() - Codifica como URL una cadena
- array_walk() - Aplicar una función proporcionada por el usuario a cada miembro de un array