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


PHP Referencing a specific array item from a form

我知道几年前我发现过一次,但我再也找不到了。

我有一个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"answers"ClassDate"的值是多少。我能够计算出哪个数组包含以下内容:

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

但现在我想找出$row["ClassID"]的$_Post值。我试过几种方法:

$row["ClassID"]

给我$row

$_POST[$row["ClassID"]]

给我阵列

$_POST[$row]["ClassID"]

给我一个错误。啊!如何获取ClassID?

感谢

您需要这样设计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
)

与其将后缀号匹配到那些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
}

谢谢大家的精彩回答。事实上,我终于找到了解决方案。

$rowarray = $_POST[$row];

我现在可以访问特定行的信息,因此:

$rowarray["ClassID"]

现在,其他偶然发现这个问题的人将有多种解决方案。