我试图在隐藏字段中发布一个数组,并希望在php中提交表单后检索该数组。
$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
但是在打印已发布的值后只获取数组字符串。 那我怎么解决呢?
答案 0 :(得分:102)
$postvalue=array("a","b","c");
foreach($postvalue as $value)
{
echo '<input type="hidden" name="result[]" value="'. $value. '">';
}
你将得到$_POST['result']
数组
print_r($_POST['result']);
答案 1 :(得分:29)
实现这一目标主要有两种方法:
以某种方式序列化数据:
$postvalue = serialize($array); // client side
$array = unserialize($_POST['result']; //server side
然后,您可以使用unserialize($postvalue)
对已发布的值进行反序列化
有关这方面的进一步信息是here in the php manuals。
Alternativley您可以使用json_encode()
和json_decode()
函数来获取json格式的序列化字符串。您甚至可以使用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
变量访问数组,而不必在表单上传输任何内容。为此,请查看a basic usage example of sessions on php.net
答案 2 :(得分:16)
您可以在客户端使用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
答案 3 :(得分:6)
序列化:
$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'])
答案 4 :(得分:1)
最好首先编码为JSON字符串,然后使用base64进行编码,例如。在服务器端以相反的顺序:使用第一个base64_decode然后使用json_decode函数。所以你将恢复你的php数组
答案 5 :(得分:1)
如果要发布数组,则必须使用其他表示法:
foreach ($postvalue as $value){
<input type="hidden" name="result[]" value="$value.">
}
这样你有三个名为result []的输入字段,当发布$_POST['result']
时将是一个数组
答案 6 :(得分:1)
<input type="hidden" name="item[]" value="[anyvalue]">
让它处于重复模式,它会将此元素作为数组发布到表单中并使用
print_r($_POST['item'])
检索项目
答案 7 :(得分:-1)
你可以这样做
<input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">