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
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.
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)
));
$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