使用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']);

主要有两种可能的方法来实现这一点:

  1. 以某种方式序列化数据:

     $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()检索数组。 但是请注意,您不应该使用数组值中出现的分隔字符(或者将其转义),并且不能使用此方法传输数组键。

  2. 使用特殊的命名input元素的属性:

     $postvalue = ""; foreach ($array as $v) { $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />'; } 

    像这样,如果发送表单,你可以将整个数组放在$_POST['result']variables中。 请注意,这不会传输数组密钥。 但是,您可以通过使用result[$key]作为每个字段的名称来实现此目的。

每种方法都有自己的优点和缺点。 你使用的主要取决于你的数组的大小,因为你应该尝试发送所有这些方法的最小数量的数据。

实现这个目的的另一种方法是将数组存储在服务器端会话中,而不是传输给客户端。 像这样,您可以通过$_SESSIONvariables访问数组,而不必在表单上传输任何内容。 为此,请查看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.","; ?>">