PHP引用表单中的特定数组项

时间:2016-05-04 03:51:43

标签: php arrays forms key

我知道几年前我发现了这个,但我再也找不到了。

我有一个HTML表单,其中包含我已设置为数组的输入组:

<label><input type='radio' name='choice1' value='K'>Keep</label><br> 
<label><input type='radio' name='choice1' value='M'>Modify</label><br> 
<label><input type='radio' name='choice1' value='D'>Delete</label>

<input name='1[ClassID]' type='text'> 
<input name='1[ClassTitle]' type='text'> 
<input name='1[ClassDate]' type='date' > 

<label><input type='radio' name='choice2' value='K'>Keep</label><br> 
<label><input type='radio' name='choice2' value='M'>Modify</label><br> 
<label><input type='radio' name='choice2' value='D'>Delete</label>

<input name='2[ClassID]' type='text'> 
<input name='2[ClassTitle]' type='text'> 
<input name='2[ClassDate]' type='date' > 

现在,我已经设置了PHP来查找Choice字段并查看它反映的内容:

        foreach($_POST as $field => $value)
    {
        if (substr($field,0,strlen($field)-1) == "Choice")
        {
            switch ($value)

这是我的问题。我想知道“ClassID”,“ClassTitle”和“ClassDate”的值是否适用于该数组中引用的输入。我能够找出具有以下内容的数组:

            $row = substr($field,strlen($field)-1,strlen($field));

但现在我想找出$ row [“ClassID”]的$ _Post值。我尝试了几件事:

$row["ClassID"]

给我$ row

$_POST[$row["ClassID"]]

给我数组

$_POST[$row]["ClassID"]

给我一​​个错误。 ARGGHHH!我如何获得ClassID?

由于

3 个答案:

答案 0 :(得分:0)

您需要像这样设计HTML:

查看更改name='ClassID[1][]' ....

<label><input type='radio' name='choice1' value='K'>Keep</label><br> 
<label><input type='radio' name='choice1' value='M'>Modify</label><br> 
<label><input type='radio' name='choice1' value='D'>Delete</label>

<input name='ClassID[1][]' type='text'> 
<input name='ClassTitle[1][]' type='text'> 
<input name='ClassDate[1][]' type='date' > 

<label><input type='radio' name='choice2' value='K'>Keep</label><br> 
<label><input type='radio' name='choice2' value='M'>Modify</label><br> 
<label><input type='radio' name='choice2' value='D'>Delete</label>

<input name='ClassID[2][]' type='text'> 
<input name='ClassTitle[2][]' type='text'> 
<input name='ClassDate[2][]' type='date' > 

发布输出

Array
(
    [choice1] => K
    [ClassID] => Array
        (
            [1] => Array
                (
                    [0] => a1
                )

            [2] => Array
                (
                    [0] => a2
                )

        )

    [ClassTitle] => Array
        (
            [1] => Array
                (
                    [0] => b1
                )

            [2] => Array
                (
                    [0] => b2
                )

        )

    [ClassDate] => Array
        (
            [1] => Array
                (
                    [0] => 2016-12-30
                )

            [2] => Array
                (
                    [0] => 2016-05-19
                )

        )

    [choice2] => M
    [submit] => Submit
)

答案 1 :(得分:0)

不是将该后缀数字与这些Class*输入相匹配,为什么不将它们分组为整行。它的命名组约定应该是这样的:

input[1][choice]
input[1][ClassID]
input[1][ClassTitle]
input[1][ClassDate]
.. and another batch with input[2] and so on

此表单中的标记应如下所示:

<label><input type='radio' name='input[1][choice]' value='K'>Keep</label><br> 
<label><input type='radio' name='input[1][choice]' value='M'>Modify</label><br> 
<label><input type='radio' name='input[1][choice]' value='D'>Delete</label>

<input name='input[1][ClassID]' type='text'> 
<input name='input[1][ClassTitle]' type='text'> 
<input name='input[1][ClassDate]' type='date' > 
<br/><br/>
<label><input type='radio' name='input[2][choice]' value='K'>Keep</label><br> 
<label><input type='radio' name='input[2][choice]' value='M'>Modify</label><br> 
<label><input type='radio' name='input[2][choice]' value='D'>Delete</label>

<input name='input[2][ClassID]' type='text'> 
<input name='input[2][ClassTitle]' type='text'> 
<input name='input[2][ClassDate]' type='date' >

所以反过来,你已经得到了整行,没有更多的匹配和其他东西:

$input = $_POST['input'];

这应该产生:

Array
(
    [1] => Array
        (
            [choice] => K
            [ClassID] => 1
            [ClassTitle] => 1
            [ClassDate] => 2016-11-11
        )

    [2] => Array
        (
            [choice] => M
            [ClassID] => 2
            [ClassTitle] => 2
            [ClassDate] => 2016-02-22
        )

)

然后做你需要做的其他事情:

foreach($input as $key => $value) {
    $key === 1, 2 etc..
    echo $value['ClassID'] corresponds to this current batch iteration
    echo $value['choice'] // the checkbox
    // your other stuff
}

答案 2 :(得分:0)

谢谢你们的回答。我实际上最终想出了解决方案。

$rowarray = $_POST[$row];

我现在可以访问该特定行的信息:

$rowarray["ClassID"]

现在遇到这个问题的其他人会有多种解决方案。