Подтвердить что ты не робот

Как передать массив в 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}'>

как это будет передано?

как мне обращаться с ним на вызываемой странице?

спасибо!

4b9b3361

Ответ 1

Если вы хотите передать массив как параметр, вам нужно будет добавить параметр для каждого элемента. Ваша строка запроса будет выглядеть следующим образом:

?arr[]=1&arr[]=2&arr[]=3&arr[]=4

Как писали другие, вы также можете сериализовать и неэтериализовать массив.

Но действительно ли вам нужно снова отправить данные клиенту? Похоже, вам просто нужен способ сохранения данных между запросами.

В этом случае лучше использовать сеансы (docs), Это также более безопасно, так как в противном случае клиент мог бы изменять данные.

Ответ 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;  

Ответ 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">

Я надеюсь, что это будет полезно для всех прохожих.