如何在数组PHP中选择一个数组

时间:2014-02-08 02:28:58

标签: php arrays forms

我试图在这里执行一些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 )

如何将嵌套数组存储在变量中。或者我如何将上面的字符串转换为数组。

谢谢

1 个答案:

答案 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;
}
?>