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

时间:2009-10-10 14:57:12

标签: php arrays

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

我之前尝试的是:

1页

<input type='hidden' name='input_name' value='<?php print_r($array_name); ?>' />

和page2

<?php 
$passed_array = $_POST['input_name'];
?>

现在我如何让$passed_array像数组一样?

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

谢谢,迈克。

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

8 个答案:

答案 0 :(得分:43)

你可以把它放在会话中:

session_start();
$_SESSION['array_name'] = $array_name;

或者,如果您想通过表单发送,可以serialize

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

$passed_array = unserialize($_POST['input_name']);

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

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

答案 1 :(得分:4)

你可以serialize the array将它变成一个字符串,然后将其反序列化,然后将其变回一个数组。像这样:

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

和第2页:

<?php $passed_array = unserialize($_POST['input_name']); ?>

答案 2 :(得分:4)

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

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

<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">

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

$array = unserialize(base64_decode($_POST["input_name"]));

答案 3 :(得分:2)

您无法一次性发送数组,您必须单独发送每个值:

<input type='hidden' name='input_name[]' value='<?php print_r($array_name[0]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[1]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[2]); ?>' />
...

或者查看json或序列化。

答案 4 :(得分:2)

您可以简单地json_encode()数组,然后在POST请求中将其作为字符串传递。多次使用它。每次像年轻的奶奶一样工作

答案 5 :(得分:1)

请注意,要使用序列化数组,您需要使用POST作为表单的传输方法,因为GET的大小限制大约为1024个字符。

我尽可能使用会话。

答案 6 :(得分:0)

在输入标记中将input_name更改为input_name [],然后为数组的每个值添加一个输入标记。

http://phpprogramming.wordpress.com/2007/05/06/php-passing-array-using-hidden-form-element/

答案 7 :(得分:0)

<?php
/*arraytransfer.php*/
echo "Array transfer<br>";
$name = array( "mike", "tom" );
$arrCnt = sizeof( $name );
echo "arrCnt: $arrCnt<br>";

echo "<form action=\"arrayrcv2.php\" method=\"POST\">";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"arrCnt\" VALUE=\"$arrCnt\">";
for( $i=0; $i < $arrCnt; $i++ ) {
  echo "<INPUT TYPE=\"HIDDEN\" NAME=\"name\" VALUE=\"$name[$i]\"> ";
}
echo "<input type=\"submit\" name=\"submit\" value=\"Submit me!\" />";
echo "</form>";
?>


<?php
/*arrayrecv.php */
$arrCnt = $_POST["arrCnt"];
echo "Receiving data arrCnt = $arrCnt<br>";
$name = array();
for( $i = 0; $i < $arrCnt; $i++ ) {
  $var = $_POST["name"];
if( $var != "" ) array_push($name, $var );
}
print_r($name);
?>