构造表单以将$ _POST变量排序到数组中

时间:2014-12-26 04:26:19

标签: php arrays

如果答案有点简单,我会道歉。我有一个表格,用户可以在其中添加"额外的线路。我可以完美地克隆它,但我需要它做的是将每一行捕获为一个数组。

示例表:

<table>
<tr>
<td><input name="rowNum[]" type="text" value="1"></td>
<td><input name="stuff" type="text"></td>
<td><input name="morestuff" type="text"></td>
</tr>

<tr>
<td><input name="rowNum[]" type="text" value="2"></td>
<td><input name="stuff" type="text"></td>
<td><input name="morestuff" type="text"></td>
</tr>
</table>

期望的结果:

$_POST[rowNum] = array(
    1 => array(
        stuff => valueA, 
        morestuff => valueB), 
    2 => array(
        stuff => valueC, 
        morestuff => valueD)
    );

对每个项目使用[ ]会将它们分成几个阵列,我不确定你是如何以正确的方式将它们加入到一起的,所以如果有人可以提供帮助,那就会太棒了!

3 个答案:

答案 0 :(得分:2)

试试这个:

<tr>
<td><input name="rowNum[1][stuff]" type="text"></td>
<td><input name="rowNum[1][morestuff]" type="text"></td>
</tr>

<tr>
<td><input name="rowNum[2][stuff]" type="text"></td>
<td><input name="rowNum[2][morestuff]" type="text"></td>
</tr>

注意第二和第三个输入名称周围的rowNum[x][]。您没有必要在问题中列出第一个输入。

答案 1 :(得分:1)

执行此操作的常规方法是在[]之后添加{。}}。

<tr>
<td><input name="rowNum[]" type="text" value="1"></td>
<td><input name="stuff[]" type="text"></td>
<td><input name="morestuff[]" type="text"></td>
</tr>

在PHP中,您将它们链接在一起,因为来自同一行的所有输入都具有相同的索引。你可以一次循环所有这些:

foreach ($_POST['rownum'] AS $i => $rownum) {
    $stuff = $_POST['stuff'][$i];
    $morestuff = $_POST['morestuff'][$i];
    ...
}

注意:这不适用于复选框输入。浏览器只发送选中的复选框,因此它们将与所有其他输入不同步。但是你没有任何复选框,所以这不是问题。复选框的解决方案是在输入的值中放入一些内容,将其链接到相应的行。

另一个适用于复选框的解决方案是将ID放入所有字段:

<tr>
<td><input name="rowNum[1]" type="text" value="1"></td>
<td><input name="stuff[1]" type="text"></td>
<td><input name="morestuff[1]" type="text"></td>
<td><input name="checked[1]" type=checkbox></td>
</tr>

<tr>
<td><input name="rowNum[2]" type="text" value="2"></td>
<td><input name="stuff[2]" type="text"></td>
<td><input name="morestuff[2]" type="text"></td>
<td><input name="checked[2]" type=checkbox></td>
</tr>

它仍然不会提交未选中的框,但所有索引仍将保持同步。您可以测试if (isset($_POST['checked'][$i]))以判断是否已选中相应的框。

答案 2 :(得分:0)

怎么样

<td><input name="1[stuff]" type="text"></td>
<td><input name="1[morestuff]" type="text"></td>
</tr>

<tr>
<td><input name="2[stuff]" type="text"></td>
<td><input name="2[morestuff]" type="text"></td>