使用 HTML 表单隐藏元素传递数组
我正在尝试在隐藏字段中发布数组,并希望在PHP中提交表单后检索该数组。
$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
但是我在打印发布的值后只得到一个数组字符串。那么我该如何解决它呢?
我正在尝试在隐藏字段中发布数组,并希望在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
然后,您可以使用 取消序列化发布的值。有关这方面的进一步信息,请参阅 PHP 手册。unserialize($postvalue)
或者,您可以使用 和 函数来获取 JSON 格式的序列化字符串。您甚至可以通过以下方式缩小传输的数据(请注意,这是性能密集型的)并保护传输的数据(以使您的数据在非8位干净传输层中生存)这可能如下所示:json_encode()
json_decode()
gzcompress()
base64_encode()
$postvalue = base64_encode(json_encode($array)); // Client side
$array = json_decode(base64_decode($_POST['result'])); // Server side
序列化数据的一种不推荐的方法(但性能非常低廉)是简单地在数组上使用,以获取一个字符串,其中包含由某些指定字符分隔的所有值。在服务器端,您可以使用 then 检索数组。但请注意,不应使用数组值中出现的字符进行分隔(或然后对其进行转义),并且无法使用此方法传输数组密钥。implode()
explode()
使用特殊命名输入元素的属性:
$postvalue = "";
foreach ($array as $v) {
$postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
}
像这样,如果发送表单,您将在变量中获取整个数组。请注意,这不会传输阵列密钥。但是,您可以通过使用每个字段的名称来实现此目的。$_POST['result']
result[$key]
这些方法中的每一个都有自己的优点和缺点。您使用的内容主要取决于数组的大小,因为您应该尝试使用所有这些方法发送最少量的数据。
实现此目的的另一种方法是将阵列存储在服务器端会话中,而不是在客户端传输它。像这样,您可以通过变量访问数组,而不必通过表单传输任何内容。为此,请查看 php.net 上会话的基本用法示例。$_SESSION