http_build_query

(PHP 5, PHP 7, PHP 8)

http_build_queryGenera una string de consulta con codificación URL

Descripción

http_build_query(
    array|object $data,
    string $numeric_prefix = "",
    ?string $arg_separator = null,
    int $encoding_type = PHP_QUERY_RFC1738
): string

Genera una string con codificación URL, construida a partir del array indexado o asociativo data.

Parámetros

data

Puede ser un array o un objeto que contiene propiedades.

Si data es un array, entonces puede ser un array de una o varias dimensiones.

Si data es un objeto, entonces solo los atributos públicos serán utilizados en el resultado.

numeric_prefix

Si se utilizan índices numéricos en el array base y numeric_prefix es proporcionado, será utilizado para prefijar los nombres de los índices para los elementos del array base solamente.

Esto permite generar nombres de variables válidos si los datos son luego decodificados por PHP o una aplicación CGI.

arg_separator

El separador de argumentos. Si no está definido o es null, arg_separator.output es utilizado para separar los argumentos.

encoding_type

Por omisión, vale PHP_QUERY_RFC1738.

Si encoding_type vale PHP_QUERY_RFC1738, entonces la codificación se realiza conforme a la » RFC 1738 y los espacios del tipo de medio application/x-www-form-urlencoded, que se ve afectado por esta elección, serán codificados en forma de un signo más (+).

Si encoding_type vale PHP_QUERY_RFC3986, entonces la codificación se realiza conforme a la » RFC 3986, y los espacios serán codificados como signo de porcentaje (%20).

Valores devueltos

Devuelve una chaîne de caractères codificada URL.

Historial de cambios

Versión Descripción
8.0.0 arg_separator ahora puede ser nullable.

Ejemplos

Ejemplo #1 Uso simple de http_build_query()

<?php
$data
= array(
'foo' => 'bar',
'baz' => 'boom',
'cow' => 'milk',
'null' => null,
'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 array indexado

<?php
$data
= array('foo', 'bar', 'baz', null, '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&4=boom&cow=milk&php=hypertext+processor
myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_4=boom&cow=milk&php=hypertext+processor

Ejemplo #3 http_build_query() con array complejo

<?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_');
?>

El ejemplo anterior mostrará: (en varias líneas para mayor 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:

Solo los elementos indexados numéricamente ("CEO") en el array base son prefijados. Los otros índices numéricos en otros niveles no necesitan serlo para tener nombres válidos.

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() - Analiza una string como una cadena de consulta URL
  • parse_url() - Analiza una URL y devuelve sus componentes
  • urlencode() - Codifica como URL una cadena
  • array_walk() - Ejecuta una función proporcionada por el usuario en cada uno de los elementos de un array