Ответ 1
Использование:
$postvalue = array("a", "b", "c");
foreach($postvalue as $value)
{
echo '<input type="hidden" name="result[]" value="'. $value. '">';
}
И вы получите $_POST['result']
в виде массива.
print_r($_POST['result']);
Я пытаюсь разместить массив в скрытом поле и хочу получить этот массив после отправки формы в PHP.
$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
Но я получаю только строку массива после печати отправленного значения. Так как я могу решить это?
Использование:
$postvalue = array("a", "b", "c");
foreach($postvalue as $value)
{
echo '<input type="hidden" name="result[]" value="'. $value. '">';
}
И вы получите $_POST['result']
в виде массива.
print_r($_POST['result']);
Есть в основном два возможных способа добиться этого:
Сериализация данных некоторым способом:
$postvalue = serialize($array); // Client side
$array = unserialize($_POST['result']; // Server side
И затем вы можете десериализовать опубликованные значения с помощью unserialize($postvalue)
. Дальнейшая информация об этом здесь в руководствах PHP.
В качестве альтернативы вы можете использовать функции json_encode()
и json_decode()
для получения сериализованной строки в формате JSON. Вы могли бы даже сократить передаваемые данные с помощью gzcompress()
(обратите внимание, что это gzcompress()
производительности) и защитить передаваемые данные с помощью base64_encode()
(чтобы ваши данные выживали в не 8-битных чистых транспортных уровнях). Это может выглядеть так:
$postvalue = base64_encode(json_encode($array)); // Client side
$array = json_decode(base64_decode($_POST['result'])); // Server side
Не рекомендуемый способ сериализации ваших данных (но очень дешевый по производительности) - просто использовать implode()
в вашем массиве, чтобы получить строку со всеми значениями, разделенными каким-либо указанным символом. На стороне сервера вы можете получить массив с помощью explode()
. Но обратите внимание, что вы не должны использовать символ для разделения, которое происходит в значениях массива (или затем экранировать его), и что вы не можете передать ключи массива с помощью этого метода.
Используйте свойства специальных именованных элементов ввода:
$postvalue = "";
foreach ($array as $v) {
$postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
}
Таким образом, вы получите весь массив в переменной $_POST['result']
если форма отправлена. Обратите внимание, что это не передает ключи массива. Однако вы можете достичь этого, используя result[$key]
качестве имени каждого поля.
Каждый из этих методов получил свои преимущества и недостатки. То, что вы используете, в основном зависит от того, насколько большим будет ваш массив, так как вы должны попытаться отправить минимальный объем данных всеми этими методами.
Другой способ добиться того же - сохранить массив в сеансе на стороне сервера, а не передавать его на стороне клиента. Таким образом, вы можете получить доступ к массиву через переменную $_SESSION
и не должны ничего передавать по форме. Для этого взгляните на базовый пример использования сессий на php.net.
Вы можете использовать serialize и base64_encode со стороны клиента. После этого используйте unserialize и base64_decode на стороне сервера.
Подобно:
На стороне клиента используйте:
$postvalue = array("a", "b", "c");
$postvalue = base64_encode(serialize($array));
// Your form hidden input
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
На стороне сервера используйте:
$postvalue = unserialize(base64_decode($_POST['result']));
print_r($postvalue) // Your desired array data will be printed here
Либо сериализовать:
$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo serialize($postvalue); ?>">
при получении: unserialize($_POST['result'])
Или взорваться:
$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo implode(',', $postvalue); ?>">
При получении: explode(',', $_POST['result'])
Лучше сначала кодировать в строку JSON, а затем кодировать с помощью Base64, например, на стороне сервера в обратном порядке: сначала использовать функции base64_decode, а затем json_decode. Таким образом, вы восстановите свой массив PHP.
Если вы хотите опубликовать массив, вы должны использовать другое обозначение:
foreach ($postvalue as $value){
<input type="hidden" name="result[]" value="$value.">
}
таким образом у вас есть три поля ввода с результатом имени [], и при публикации $_POST['result']
будет массив
<input type="hidden" name="item[]" value="[anyvalue]">
Пусть он будет в повторном режиме, он выведет этот элемент в форме в виде массива и использует
print_r($_POST['item'])
Чтобы получить элемент
Вы можете сделать это так:
<input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">