获取相关表单字段的列表作为关联数组

时间:2012-11-24 15:36:19

标签: php javascript forms

作为个人惯例,我正在为我正在制作的个人网站编写框架。目前我正在尝试创建一种在我的网站上显示表单的通用方法。我正在使用JSON模型来对表单进行建模,然后通过PHP将其转换为HTML。我目前正试图允许的是这样的:

[type] [contact address]
[type] [contact address]
+ Add More

我知道使用像“type []”这样的表单元素名称,各种类型字段的值将作为数组发送到php。但是,在这种情况下,typecontact address属于一起。我知道实现这一目标的各种方法,比如循环遍历类型,然后获取相关的其他字段,但以某种方式将其转换为关联数组似乎更容易在代码中使用。

请注意,我知道实现这一目标的各种方法,但我正在努力寻求一些最佳实践。我更喜欢在PHP中这样做,因为我正在努力减少我网站上的javascript数量。

2 个答案:

答案 0 :(得分:1)

您实际上可以构建多维数组,例如contact[id][type]contact[id][address]。因此,如果您有id,如果要添加新值,则可以是增量值,为两者提供相同的id。 PHP会将其视为多维数组,如$_POST['contact'][1]['type'] == 'sometype, $_POST['contact'][1]['address'] == 'theaddress'

所以你的新表单输入如下:

<input id='someid_type_123' name='contact[123][type]' />
<input id='someid_address_123' name='contact[123][address]' />

<input id='someid_type_124' name='contact[124][type]' />
<input id='someid_address_124' name='contact[124][address]' />

然后你可以循环$_POST['contact']

foreach ($_POST['contact'] as $id => $values) {
  echo $values['type'] . ' ' . $values['address'];
}

带示例输入的var_dump($_POST)类似于:

array(1) {
  ["contact"]=>
  array(2) {
    [123]=>
    array(2) {
      ["type"]=>
      string(5) "type1"
      ["address"]=>
      string(5) "addr1"
    }
    [124]=>
    array(2) {
      ["type"]=>
      string(5) "type2"
      ["address"]=>
      string(5) "addr2"
    }
  }
}

用于在JavaScript中生成id的方法(假设您不提前知道它们)完全取决于您。您可以在1处启动变量,并在每次单击add more链接时将其递增。 id的值并不重要,只要它对输入对是相同的。

// Initialize curId on page load.
var curId = 1;

addMoreLink.onclick = function() {
  // append the new inputs using curId
  // and then increment the value
  curId++;
}

答案 1 :(得分:0)

您需要一个键将所有相关元素绑定到一起。您的系统中包含唯一用户ID或任何唯一之类的内容。所以类型的每个元素都可以是任何东西,但如果它们属于一个父元素(如用户/客户等),那么它们必须共享父对象id。我怀疑有什么更简单的