PHP - 如何将数组发送到另一个页面?

Mik*_*ike 19 php arrays

我正在尝试将数组发送到另一个页面.

我以前尝试过的是:

第1页

<input type='hidden' name='input_name' value='<?php print_r($array_name); ?>' />
Run Code Online (Sandbox Code Playgroud)

和page2

<?php 
$passed_array = $_POST['input_name'];
?>
Run Code Online (Sandbox Code Playgroud)

现在我如何使$passed_array行为像一个数组?

或者你知道解决这个问题的其他方法吗?

谢谢,迈克.

编辑:我想这样做的原因是因为我需要避免会话和cookie.

Gre*_*reg 44

你可以把它放在会话中:

session_start();
$_SESSION['array_name'] = $array_name;
Run Code Online (Sandbox Code Playgroud)

或者,如果您想通过表单发送它,可以序列化:

<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />

$passed_array = unserialize($_POST['input_name']);
Run Code Online (Sandbox Code Playgroud)

会话的优点是客户端看不到它(因此无法篡改它),如果数组很大,它会更快.缺点是,如果用户打开了多个标签,可能会感到困惑.

编辑:很多答案都建议使用name="input_name[]".这在一般情况下不起作用 - 需要修改它以支持关联数组,并进行大量修改以支持多维数组(icky!).坚持序列化要好得多.


AlB*_*ebe 5

当数组中的某些值包含换行符时,我在上述示例中遇到了一些问题。我的一些价值观也有来自外语的字符,这些字符htmlentities一直搞砸。以下是我的解决方案。

在您想要从中传递数组的页面中...

<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">
Run Code Online (Sandbox Code Playgroud)

在接收数组的页面中...

$array = unserialize(base64_decode($_POST["input_name"]));
Run Code Online (Sandbox Code Playgroud)