Pasar matrices como parámetro de URL
¿Cuál es la mejor manera de pasar una matriz como parámetro de URL? Estaba pensando si esto es posible:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
o que tal esto:
$url = 'http://www.example.com?aParam[]='.$aValues;
He leído ejemplos, pero lo encuentro confuso:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
Hay una solución muy sencilla: http_build_query()
. Toma sus parámetros de consulta como una matriz asociativa:
$data = array(
1,
4,
'a' => 'b',
'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));
regresará
string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"
http_build_query()
maneja todos los escapes necesarios por usted ( %5B
=> [
y %5D
=> ]
), por lo que esta cadena es igual a aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.
Editar: no te pierdas la solución de Stefan anterior, que utiliza la http_build_query()
función muy útil: https://stackoverflow.com/a/1764199/179125
Knittl tiene razón en cuanto a escapar. Sin embargo, hay una manera más sencilla de hacer esto:
$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));
Si quieres hacer esto con una matriz asociativa, prueba esto:
PHP 5.3+ (función lambda)
$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
},
array_keys($aValues), $aValues)
);
PHP <5.3 (devolución de llamada)
function urlify($key, $val) {
return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}
$url = 'http://example.com/index.php?';
$url .= implode('&', array_map('urlify', array_keys($aValues), $aValues));