Pasar matrices como parámetro de URL

Resuelto uji asked hace 54 años • 11 respuestas

¿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';
uji avatar Jan 01 '70 08:01 uji
Aceptado

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.

Stefan Gehrig avatar Nov 19 '2009 15:11 Stefan Gehrig

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('&amp;', array_map('urlify', array_keys($aValues), $aValues));
Jordan Running avatar Nov 19 '2009 14:11 Jordan Running