使用Html表单隐藏元素传递数组
我想在一个隐藏的字段中发布数组,并希望在提交表单在PHP后检索该数组。
$postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo $postvalue; ?>">
但是,在打印发布的值之后只获取数组string。 那我该如何解决呢?
$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格式的序列化string。 你甚至可以使用gzcompress()
缩小传输的数据(注意这是性能密集型的),并使用base64_encode()
来保护传输的数据(以使数据在非8位清洁传输层中存活)。看起来像这样:$postvalue = base64_encode(json_encode($array)); //client side $array = json_decode(base64_decode($_POST['result'])); //server side
一个不推荐的方法来序列化您的数据(但性能非常便宜)是简单地在您的数组上使用
implode()
来获取一个string的所有值由一些指定的字符分隔。 在服务器端,你可以用explode()
检索数组。 但是请注意,您不应该使用数组值中出现的分隔字符(或者将其转义),并且不能使用此方法传输数组键。 -
使用特殊的命名input元素的属性:
$postvalue = ""; foreach ($array as $v) { $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />'; }
像这样,如果发送表单,你可以将整个数组放在
$_POST['result']
variables中。 请注意,这不会传输数组密钥。 但是,您可以通过使用result[$key]
作为每个字段的名称来实现此目的。
每种方法都有自己的优点和缺点。 你使用的主要取决于你的数组的大小,因为你应该尝试发送所有这些方法的最小数量的数据。
实现这个目的的另一种方法是将数组存储在服务器端会话中,而不是传输给客户端。 像这样,您可以通过$_SESSION
variables访问数组,而不必在表单上传输任何内容。 为此,请查看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,然后使用反序列化和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
首先编码为JSONstring,然后用base64编码比较好。 在服务器端以相反的顺序:先使用base64_decode然后使用json_decode函数。 所以你会恢复你的PHP数组
如果你想发布一个数组,你必须使用另一个符号:
foreach ($postvalue as $value){ <input type="hidden" name="result[]" value="$value."> }
这样你有三个名字为result []的input字段,当发布$_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.","; ?>">