Как передать массив через $ _GET в php? - PullRequest
42 голосов
/ 26 августа 2011

Как я могу передать одну или несколько переменных типа массив на другую страницу через $ _GET?

Я всегда передавал значения переменных в форме ?a=1&b=2&c=3

Как насчет передачи a=[1,2,3]?

Нужно ли писать цикл for и добавлять все значения?

Спасибо

Ответы [ 4 ]

87 голосов
/ 26 августа 2011

Вы можете использовать синтаксис [] для передачи массивов через _GET:

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

PHP понимает этот синтаксис, поэтому $_GET['a'] будет равно array(1, 2, 3).

Youтакже можно указать ключи:

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

Также работают многомерные массивы:

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

http_build_query() делает это автоматически:

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"

Альтернативой может быть передача кодированных в json массивов:

?a=[1,2,3]

И вы можете проанализировать a с помощью json_decode:

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

И снова закодировать его с помощью json_encode:

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

Никогда не используйте serialize() для этой цели .Serialize позволяет сериализовать объекты, и есть способы заставить их выполнять код.Поэтому вы никогда не должны десериализовывать ненадежные строки.

6 голосов
/ 26 августа 2011

Вы можете передать ассоциативный массив в http_build_query() и добавить полученную строку в качестве строки запроса к URL-адресу. Массив будет автоматически анализироваться PHP, поэтому $_GET на принимающей странице будет содержать массив.

Пример

$query_str = http_build_query(array(
    'a' => array(1, 2, 3)
));
4 голосов
/ 14 февраля 2016
$city_names = array(
    'delhi',
    'mumbai',
    'kolkata',
    'chennai'
);
$city_query = http_build_query(array('city' => $city_names));

это даст вам:

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

если вы хотите закодировать скобки, используйте код ниже:

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

Выход:

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

Ссылка: http_build_query , urlencode

0 голосов
/ 24 июля 2014

Просто повторите ваши $_GET переменные, как это: name=john&name=lea

Это дает вам array.

Раньше я верил, что это будет перезаписано!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...