【问题标题】:How can I use the array-format input field names in my HTML form that posts to PHP?如何在发布到 PHP 的 HTML 表单中使用数组格式的输入字段名称?
【发布时间】:2011-06-10 05:50:30
【问题描述】:

我了解使用数组格式的 HTML 输入名称的基础知识。如果我有一个包含可变数量的“项目”输入的表单,我可能会为每个输入做这样的事情:

<input name='item[]' type='text' />

当我从 $_POST 数组中检索项目时,我可以像这样遍历它们:

$items = $_POST['item'];
foreach($items as $item) {
}

但我的问题稍微复杂一些。我有一个表单,用户可以在其中单击“添加一个”按钮,表单底部将出现一个新行。每个新行都包含一个“名称”和“描述”输入。

所以一开始我以为我会这样做:

<input name='item[name][]' type='text' />
<input name='item[description][]' type='text' />

然后像这样遍历它们:

$items = $_POST['item'];
foreach($items as $item) {
  print $item['name'] . ' ' . $item['description'];
}

但它并没有像我希望的那样工作,而是构造了“项目”数组,这样我就可以将第一个项目名称访问为 $item['name'][0] 而不是 $item[0]['name']。

然后我翻转它,这样我的输入就被命名为:

<input name='item[][name]' type='text' />
<input name='item[][description]' type='text' />

但这导致每个“名称”和每个“描述”都有一个单独的“项目”,而不是将每一对分组在一个“项目”中。

我真的不喜欢有“名称”数组和单独的“描述”数组。我更喜欢“项目”数组,每个数组包含一个“名称”和一个“描述”字段。有没有办法在我的javascript中不生成索引来实现这一点?由于人们可以动态添加和删除这些,因此我的 javascript 很难为下一项计算适当的索引。一般没有办法做到这一点吗?

【问题讨论】:

  • 拥有name 数组和description 数组有什么不好? -- 你可以稍后将它们拼凑起来。
  • @Mark E:我有强迫症,这真的让我很困扰,以至于我无法绕过它继续前进。我所有的其他数组(例如来自数据库)都是第一个维度的行索引和第二个维度的属性名称。
  • 嗯,解决命名问题的唯一方法是将数字放在空括号中,这似乎是可用选择中最糟糕的,你不觉得吗?

标签: php html forms multidimensional-array


【解决方案1】:

不可能做你想做的事,但如果它有帮助,这里有一些我认为可以工作的代码(使用item_name[] 和item_description[]):

$items_desc = $_POST["item_description"];
$items_name = $_POST["item_name"];
$items = array();
for ($i = 0; $i < count($items_name); $i++)
{
    $items[] = array("name" => $items_name[$i], "description" => $items_desc[$i]);
}

【讨论】:

  • 使用了代码块上的格式按钮,因为pre 标签无法正常显示。希望你不要介意。
  • @prodigitalson 这就是版主应该采取的行动/行为方式!我指出来让别人认识!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2014-03-06
  • 1970-01-01
  • 2020-02-08
  • 2012-01-27
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多