http_build_query

(PHP 5, PHP 7)

http_build_queryGenerar 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