Как передать массив в GET в PHP?
$idArray = array(1,2,3,4);
Можно ли написать эту строку в HTML?
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$idArray}'>
или мне следует написать:
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr[]={$idArray}'>
как это будет передано?
как мне обращаться с ним на вызываемой странице?
спасибо!
Ответы
Ответ 1
Если вы хотите передать массив как параметр, вам нужно будет добавить параметр для каждого элемента. Ваша строка запроса будет выглядеть следующим образом:
?arr[]=1&arr[]=2&arr[]=3&arr[]=4
Как писали другие, вы также можете сериализовать и неэтериализовать массив.
Но действительно ли вам нужно снова отправить данные клиенту? Похоже, вам просто нужен способ сохранения данных между запросами.
В этом случае лучше использовать сеансы (docs), Это также более безопасно, так как в противном случае клиент мог бы изменять данные.
Ответ 2
Используйте функцию serialize
и unserialize
PHP.
Эта функция предоставляет вам сохраняемую (строчную) версию типа массива.
Для получения дополнительной информации об использовании прочитайте
http://php.net/manual/en/function.serialize.php
и http://www.php.net/manual/en/function.unserialize.php
Ответ 3
Еще один вариант (даже симпатичный, я бы сказал):
<form method='POST'>
<input type="hidden" name="idArray[]" value="1" />
<input type="hidden" name="idArray[]" value="2" />
<input type="hidden" name="idArray[]" value="3" />
<input type="hidden" name="idArray[]" value="4" />
</form>
Но, конечно, он отправляется как POST. Я бы не рекомендовал отправлять его с serialize, поскольку выходные данные этой функции могут быть довольно большими, а длина или URL-адрес ограничены.
с GET:
<form method='GET'>
<input type="hidden" name="idArray[]" value="1" />
<input type="hidden" name="idArray[]" value="2" />
<input type="hidden" name="idArray[]" value="3" />
<input type="hidden" name="idArray[]" value="4" />
</form>
Ответ 4
Вы можете использовать сериализацию и сериализацию вместе с urlencode
например.
При отправке вы можете отправить их следующим образом:
<?php
$array1 = Array(["key1"]=>"value1",["key2"]=>"value2");
$array2 = Array(["key1"]=>"value1",["key2"]=>"value2");
$data1="textdata";
$urlPortion= '&array1='.urlencode(serialize($array1)).
'&array2='.urlencode(serialize($array2)).
'&data1='.urlencode(serialize($data1));
//Full URL:
$fullUrl='http://localhost/?somevariable=somevalue'.$urlPortion
?>
При получении вы можете получить к ним доступ:
<?php
$destArray1=unserialize($_GET['array1']);
$destArray2=unserialize($_GET['array2']);
$destData1=unserialize($_GET['data1']);
?>
И Voila, вы можете прикрепить этот URL-адрес к запросу ajax или обычной странице браузера.
Ответ 5
Просто используйте explode()
и передайте его значение. Вы можете вернуть массив, используя implode().
Примечание. Выберите разделитель в соответствии с типом содержимого, которого нет в вашем массиве. Напр. Если вы уверены, что в вашем массиве не будет никаких запятых (,), тогда выберите запятую как разделитель.
Ответ 6
Используйте функцию parse_str
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;
Ответ 7
http://snipplr.com/view/4444/passing-an-array-through-get-request/
$str=serialize($idArray);
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr=$str'>
Чтобы получить данные на странице приема, вам сначала нужно:
<?PHP
$idArray = unserialize($_GET["arr"]);
?>
Ответ 8
В конкретном случае, о котором вы упомянули, я бы развязал массив строкой, а затем взорвал ее при отправке формы.
$str = rawurlencode(implode(",",$idArray));
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$str}'>
а затем после обработки:
$idArray = explode(",",rawurldecode($_POST['arr']));
Ответ 9
serialize()
ваш массив и пропустите это. Затем наберите unserialize()
. http://ie.php.net/serialize
Ответ 10
Сессия - гораздо более безопасный и чистый способ сделать это. Начните сеанс с:
session_start();
Затем добавьте сериализованный массив в качестве переменной сеанса, как это:
$_SESSION["venue"] = serialize($venue);
Просто вызовите переменную сеанса, когда вам это нужно.
Ответ 11
Ответ Феликса прекрасно отвечает на вопрос, но, на мой взгляд, ему не хватает примеров.
Этот ответ вызван комментарием к ответу Феликса.
Вы можете указать ключи, используя этот метод? - Qwerty 27 апреля '14 в 0:05
Прежде всего, чтобы проиллюстрировать ответ Феликса:
<input type="hidden" name="array[]" value="val1" />
<input type="hidden" name="array[]" value="val2" />
<input type="hidden" name="array[]" value="val3" />
Когда запрос отправляется на сервер, он будет иметь тип Array
.
Ниже приведен пример с ключами. Это даст вам массив с двумя ключами, по два значения каждый.
<input type="hidden" name="array['first']" value="val1" />
<input type="hidden" name="array['first']" value="val2" />
<input type="hidden" name="array['second']" value="val3" />
<input type="hidden" name="array['second']" value="val4" />
Наконец, вот пример с VueJS, который я использовал на момент написания этой статьи, который привел меня к этому вопросу.
<input v-for="(value, key) in data" type="hidden" :name="'array[' + key + ']'" :value="value">
Я надеюсь, что это будет полезно для всех прохожих.