将数组传递给窗体作为隐藏的“密钥”将丢失

时间:2013-06-11 10:42:50

标签: php

这是我的数组

$array = array('foo' => 'bar', 'baz', 'bat' => 2);



<form method='POST' action='test.php' onsubmit='return validateForm()' >
echo '<input type="hidden" name="array" value= "'.implode(',', $array).'">';
echo "<<input type='submit' name='Submit'  value='submit' />";
echo '</form>';


$arry = explode(',', $_POST['array']);

我得到的密钥是0,1,2。哪个应该是“foo”,“baz”,“bat”。

如何获得正确的密钥?

5 个答案:

答案 0 :(得分:1)

如果我是怀特,你需要在发布表格之后使用数组键来破坏数组值。

我认为,json_encode是一个很好的解决方案。我正在添加另一种解决方案。

添加另一个隐藏元素,该元素将使用数组值发布数组键。

echo '<input type="hidden" name="values" value= "'.implode(',', array_values($array)).'">';
echo '<input type="hidden" name="keys" value= "'.implode(',', array_keys($array)).'">';

test.php

$arrayValues = explode(',', $_POST['values']);
$arrayKeys = explode(',', $_POST['keys']);

$yourFinalArray = array_combine($arrayKeys, $arrayValues);

答案 1 :(得分:0)

使用例如json_encodejson_decode函数对数组进行编码和解码。

函数implode忽略数组键。

答案 2 :(得分:0)

其实有些不对劲。 Yuo正在爆炸阵列,而你应该将其摧毁。此外,您无法将baz作为键检索,因为它是一个值。它的关键是0,看一下这个样本

$array = array('foo' => 'bar', 'baz', 'bat' => 2);
$arry = implode(',', $array_key($array));
echo $arra;

这将在逗号分隔值列表中转换数组的键

foo,0,bat

Live Sample

另一方面,如果您将从您的帖子数组中获取值,您将获得

$array = array('foo' => 'bar', 'baz', 'bat' => 2);
$arry = implode(',', $array_values($array));
echo $arra;

输出

bar,baz,2
  //^ as you can see baz it's between values

Live Sample

答案 3 :(得分:0)

请勿在您的数组中使用,使用'",我会看到它看起来像这样 - &gt; array(3) { ["foo"]=> string(3) "bar" [0]=> string(3) "baz" ["bat"]=> int(2) }

答案 4 :(得分:0)

您可以以表格形式发送数组

page1.php中     

$array = array('foo' => 'bar', 'baz', 'bat' => 2);

echo "<form method='POST' action='page2.php' onsubmit='return validateForm()' >";
foreach($array as $key=>$value) {
echo '<input type="hidden" name="array[]" value = "'.$key."|".$value.'">';
}
echo "<input type='submit' name='Submit' value='submit' />";
echo '</form>';
?>

使page2.php

<?php
$array = array();
foreach($_POST['array'] as $value) {
    $a = explode("|",$value);   
    $array[$a[0]] = $a[1];
}
print_r($array);
?>

输出:

Array
(
    [foo] => bar
    [0] => baz
    [bat] => 2
)