如何通过POST提交多维数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (90)

我有一个php表单,它有一个已知的列数(例如。顶部直径,底部直径,织物,颜色,数量),但有一个未知的行数,因为用户可以添加行的需要。

我发现了如何将每个字段(列)放入自己的数组中。

<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" />
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" />

因此,我在HTML中得到的结果是:

<tr>
  <td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td>
  <td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td>
</tr>
<tr>
  <td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td>
  <td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td>
</tr>

...and so on.

我现在想做的是把所有的行和列放到一个多维数组中,并将其内容发送给客户端(最好是在一个格式良好的表中)。我还没有真正理解如何将所有这些输入组合起来,并选择到一个很好的数组中。

在这一点上,我将尝试使用几个一维数组,尽管我认为使用单个2D数组比使用几个一维数组更好。

提问于
用户回答回答于

在提交时,你将得到一个数组,就像这样创建了一个数组:

$_POST['topdiameter'] = array( 'first value', 'second value' );
$_POST['bottomdiameter'] = array( 'first value', 'second value' );

但是,我建议将表单名称改为此格式:

name="diameters[0][top]"
name="diameters[0][bottom]"
name="diameters[1][top]"
name="diameters[1][bottom]"
...

使用这种格式,可以更容易地遍历这些值。

if ( isset( $_POST['diameters'] ) )
{
    echo '<table>';
    foreach ( $_POST['diameters'] as $diam )
    {
        // here you have access to $diam['top'] and $diam['bottom']
        echo '<tr>';
        echo '  <td>', $diam['top'], '</td>';
        echo '  <td>', $diam['bottom'], '</td>';
        echo '</tr>';
    }
    echo '</table>';
}
用户回答回答于

你可以提交具有这样命名的所有参数:

params[0][topdiameter]
params[0][bottomdiameter]
params[1][topdiameter]
params[1][bottomdiameter]

然后你可以做这样的事情:

foreach ($_REQUEST['params'] as $item) {
    echo $item['topdiameter'];
    echo $item['bottomdiameter'];
}

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励