Я пытаюсь опубликовать массив в скрытом поле и хочу получить этот массив после отправки формы в 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 .
Alternativley вы можете использовать функции json_encode()
и json_decode()
чтобы получить сериализованную строку в формате json. Вы можете даже сжать переданные данные с помощью gzcompress()
(обратите внимание, что это интенсивно работает) и base64_encode()
переданные данные с помощью base64_encode()
(чтобы ваши данные сохранились на чистых транспортных слоях, отличных от 8 base64_encode()
). Это может выглядеть так:
$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
Либо сериализуйте:
$postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo serialize($postvalue); ?>">
on receive: unserialize($_POST['result'])
или взорвать:
$postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo implode(',', $postvalue); ?>">
on receive: explode(',', $_POST['result'])
Вы можете использовать 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
лучше сначала кодировать 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.","; ?>">