我试图在这里执行一些array-ception:数组中的数组。我有一个字符串形式,将隐藏的值传递给下一个表单。其中一个表单将一个复选框值数组提交给另一个表单。然后,该表单将所有以前的表单提交到数据库中。除了一个问题外,它的工作效果很好。当通过另一个表单传递复选框数组时,它会将数组放入另一个数组中。我想选择嵌套数组并将其存储在局部变量中。该数组称为兴趣
Array ( [0] => Array ( [0] => movies [1] => art [2] => cars [3] => business [4] => comedy [5] => technology ) )
现在我的数组看起来像上面的数组。当我将[0]添加到$ _POST ['interest']时,如此:
$int = $_POST['interests'][0];
它成功地将第二个数组存储到变量int中。问题是它将它存储为字符串而不是数组。当我通过
回声时,它仍然看起来像一个数组Array ( [0] => movies [1] => art [2] => cars [3] => business [4] => comedy [5] => technology )
如何将嵌套数组存储在变量中。或者我如何将上面的字符串转换为数组。
谢谢
答案 0 :(得分:0)
如果我理解你的意思(并且它是一个巨大的if),你可以使用以下内容:
原始页面:
<form method="POST" ... >
<input type='checkbox' name='passable[interests][]' value='movies'>
<input type='checkbox' name='passable[interests][]' value='art'>
<input type='checkbox' name='passable[interests][]' value='cars'>
<input type='checkbox' name='passable[interests][]' value='business'>
<input type='checkbox' name='passable[interests][]' value='comedy'>
<input type='checkbox' name='passable[interests][]' value='technology'>
</form>
中级页面:
<?php
function pass_previous_data ()
{
foreach ($_POST['passable'] as $name => $block)
foreach ($block as $value)
{
echo "<input type='hidden' name='passable[$name][]' value='$value'>";
}
}
?>
<form method="POST" ... >
// by default, form fields will not be forwarded
<input type='text' name='added_data' value='whatever'>
// inject previous data as hidden fields
<?php pass_previous_data (); ?>
// add more forwardable data
<input type='checkbox' name='passable[languages][]' value='English'>
<input type='checkbox' name='passable[languages][]' value='Español'>
<input type='checkbox' name='passable[languages][]' value='Deutsch'>
<input type='checkbox' name='passable[languages][]' value='Русский'>
</form>
最后一页应该将整个选定值数据包视为一个数组。
系统允许您通过将输入名称声明为passable
来跨多个页面转发数据
它使用最少的PHP代码非常简单地检索数据。
所有这些都说,这是传递数据的一种非常低效的方式:
您生成一个完整的隐藏HTML输入以传递每个单独的值。
您可以使用Json或PHP序列化机制对数组进行编码,但我想您有理由不这样做。
以上是上述示例的单页工作演示(虽然通过PHP / HTML混合进行了一些混淆)
<!DOCTYPE html>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<?php
// recreate hidden fields to forward previous post data
function pass_previous_data ()
{
foreach ($_POST['passable'] as $name => $block)
foreach ($block as $value)
{
echo "<input type='hidden' name='passable[$name][]' value='$value'>";
}
}
if (!isset($_POST['page']))
{ // first page
?>
<body onload='document.getElementById("post").submit();'>
<form method="POST" id="post">
<input type='hidden' name='page' value='2'>
<input type='checkbox' name='passable[interests][]' value='movies' checked>
<input type='checkbox' name='passable[interests][]' value='art' checked>
<input type='checkbox' name='passable[interests][]' value='cars'>
<input type='checkbox' name='passable[interests][]' value='business'>
<input type='checkbox' name='passable[interests][]' value='comedy'>
<input type='checkbox' name='passable[interests][]' value='technology' checked>
</form>
</body>
<?php } else switch ($_POST['page']) {
case '2': // second page
?>
<body onload='document.getElementById("post").submit();'>
<form method="POST" id="post">
<input type='hidden' name='page' value='3'>
<?php pass_previous_data (); ?>
<input type='text' name='added_data' value='whatever'>
<input type='checkbox' name='passable[languages][]' value='English' checked>
<input type='checkbox' name='passable[languages][]' value='Español'>
<input type='checkbox' name='passable[languages][]' value='Deutsch' checked>
<input type='checkbox' name='passable[languages][]' value='Русский' checked>
</form>
</body>
<?php break;
case '3':
// final page
echo"<pre>";print_r ($_POST);echo"</pre>";
break;
}
?>