我正在尝试在隐藏字段中发布数组,并希望在PHP中提交表单后检索该数组。
$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
但是在打印发布的值后,我只能得到一个数组字符串。那么我该如何解决呢?
Answers:
使用:
$postvalue = array("a", "b", "c");
foreach($postvalue as $value)
{
echo '<input type="hidden" name="result[]" value="'. $value. '">';
}
您将得到$_POST['result']一个数组。
print_r($_POST['result']);
name="result[][]"
主要有两种方法可以实现此目的:
以某种方式序列化数据:
$postvalue = serialize($array); // Client side
$array = unserialize($_POST['result']; // Server side
然后,您可以使用取消序列化发布的值unserialize($postvalue)。有关此的更多信息,请参见PHP手册。
Alternativeley您可以使用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()then检索数组。但是请注意,您不应使用出现在数组值中的字符进行分隔(或将其转义),并且不能使用此方法传输数组键。
使用特殊命名输入元素的属性:
$postvalue = "";
foreach ($array as $v) {
$postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
}
这样,$_POST['result']如果发送表单,则整个数组都将包含在变量中。请注意,这不会传输数组键。但是,您可以通过将其result[$key]用作每个字段的名称来实现此目的。
这些方法的每个人都有自己的优点和缺点。使用的方法主要取决于数组的大小,因为您应该尝试使用所有这些方法发送最少的数据。
实现此目的的另一种方法是将数组存储在服务器端会话中,而不是在客户端传输它。这样,您可以通过$_SESSION变量访问数组,而不必通过表单传输任何内容。为此,请查看php.net上会话的基本用法示例。
value属性周围使用单引号。否则,将在序列化版本的第一个双引号处修剪数据。
您可以从客户端使用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'])
如果要发布数组,则必须使用另一种表示法:
foreach ($postvalue as $value){
<input type="hidden" name="result[]" value="$value.">
}
这样,您将获得三个名称为result []的输入字段,并且在发布时$_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.","; ?>">