主要是作为个人实践,我正在为我正在开发的个人网站编写一个框架。目前我正在尝试创建一种通用方式来在我的网站上显示表单。我正在使用 JSON 模型对表单建模,然后由 PHP 将其转换为 HTML。我目前试图允许的是这样的:
[type] [contact address]
[type] [contact address]
+ Add More
我知道使用像“type[]”这样的表单元素名称,各种类型字段的值将作为数组发送到 php。但是,在这种情况下,类型
和联系地址
属于同一类。我知道实现此目的的各种方法,例如遍历类型,然后获取相关的其他字段,但以某种方式将其转换为关联数组似乎更容易在代码中使用。
请注意,我知道实现此目标的各种方法,但我正在努力寻求一些最佳实践。我更喜欢在 PHP 中执行此操作,因为我正试图尽量减少我网站上的 javascript 数量。
最佳答案
您实际上可以构建多维数组,例如 contact[id][type]
和 contact[id][address]
。因此,如果您有一个 id
,如果您要添加新的,它可能是一个增量值,请为两者提供相同的 id
。 PHP 会将其视为多维数组,如 $_POST['contact'][1]['type'] == 'sometype, $_POST['contact'][1]['address'] == '地址'
.
所以你的新表单输入看起来像:
<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++;
}
关于php - 获取相关表单字段的列表作为关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542692/