web-dev-qa-db-fra.com

Comment passer un tableau via $ _GET en php?

Comment passer une ou plusieurs variables de type tableau à une autre page via $ _GET?

J'ai toujours transmis des valeurs variables sous la forme ?a=1&b=2&c=3

Qu'en est-il du passage a=[1,2,3]?

Dois-je écrire une boucle for et ajouter toutes les valeurs?

Merci

42
Mirko

Vous pouvez utiliser la syntaxe [] Pour passer des tableaux via _GET:

?a[]=1&a[]=2&a[]=3

PHP comprend cette syntaxe, donc $_GET['a'] Sera égal à array(1, 2, 3).

Vous pouvez également spécifier des clés:

?a[42]=1&a[foo]=2&a[bar]=3

Les tableaux multidimensionnels fonctionnent également:

?a[42][b][c]=1&a[foo]=2

http_build_query() fait cela automatiquement:

http_build_query(array('a' => array(1, 2, 3))) // "a[]=1&a[]=2&a[]=3"

http_build_query(array(
    'a' => array(
        'foo' => 'bar',
        'bar' => array(1, 2, 3),
     )
)); // "a[foo]=bar&a[bar][]=1&a[bar][]=2&a[bar][]=3"

Une alternative serait de passer des tableaux encodés json:

?a=[1,2,3]

Et vous pouvez analyser a avec json_decode:

$a = json_decode($_GET['a']); // array(1, 2, 3)

Et encodez-le à nouveau avec json_encode:

json_encode(array(1, 2, 3)); // "[1,2,3]"

N'utilisez jamais serialize() à cette fin . Sérialiser permet de sérialiser des objets, et il existe des moyens de leur faire exécuter du code. Vous ne devez donc jamais désérialiser des chaînes non fiables.

87
Arnaud Le Blanc

Vous pouvez passer un tableau associatif à http_build_query() et ajouter la chaîne résultante comme chaîne de requête à l'URL. Le tableau sera automatiquement analysé par PHP so $_GET sur la page de réception contiendra un tableau.

Exemple

$query_str = http_build_query(array(
    'a' => array(1, 2, 3)
));
6
Michael Mior
$city_names = array(
    'delhi',
    'mumbai',
    'kolkata',
    'chennai'
);
$city_query = http_build_query(array('city' => $city_names));

cela vous donnera:

city[0]=delhi&city[1]=mumbai&city[2]=kolkata&city[3]=chennai

si vous souhaitez également coder les crochets, utilisez le code ci-dessous:

$city_query = urlencode(http_build_query(array('city' => $city_names)));

Sortie:

city%255B0%255D%3Ddelhi%26city%255B1%255D%3Dmumbai .....

Référence: http_build_query , rlencode

4
IRSHAD