这是一种使用纯 HTML 的方法,可以几乎准确到达您想要的位置,并且只使用 HTML:
<form action="options.php" method="post">
<input type="text" name="options[deptid]" id="deptid" />
<input type="text" name="options[deptname]" id="deptname" />
<input type="submit" name="submit" id="submit" value="save" />
</form>
这会给你在 PHP 中:
$post_options = array(
'options' => array(
'deptid '=> '[that input element value]',
'deptname' => '[that input element value]'
)
);
然后您可以(包括清理)访问,例如:
$post_options = array('options');
if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
// Do whatever
}
if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
// Do whatever
}
编辑
或者...您想在input name 属性中引用deptid 并使用它来修改部门名称所在的行?这似乎表明这样的事情:
<?php
$deptid = 1;
$deptname = 'Department of Silly Walks';
?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">
哪些输出:
<input type="hidden" name="options[1]" value="Department of Silly Walks">
http://codepad.org/DtgoZGe7
问题在于$deptid 值变成了一个实际上并没有直接命名或引用的值。我认为由于从服务器到客户端再返回的值的这种抽象,实现这可能会出现问题,所以我会推荐我在顶部拥有的东西。这在实践中并没有太大的不同,但它或多或少是自我记录的。
注意,如果您想对部门列表进行序列化,那就有点棘手了。例如,您可以试试这个:
<input type="text" name="options[][deptid]" id="deptid" />
<input type="text" name="options[][deptname]" id="deptname" />
这将为每个 input 添加一个索引值。但是……它们不会直接关联。因此,您将获得每个键对应的两个零索引数组。
在这种情况下,我的建议是使用 Javascript 来添加每个新部门的 input 元素,这样您就可以给每个元素一个数字,例如:
<input type="text" name="options[0][deptid]" id="deptid" />
<input type="text" name="options[0][deptname]" id="deptname" />
<br/>
<input type="text" name="options[1][deptid]" id="deptid" />
<input type="text" name="options[1][deptname]" id="deptname" />
<br/>
<input type="text" name="options[2][deptid]" id="deptid" />
<input type="text" name="options[2][deptname]" id="deptname" />
<br/>
<input type="text" name="options[3][deptid]" id="deptid" />
<input type="text" name="options[3][deptname]" id="deptname" />
或者使用老式的 POSTBACK 方法并使用 PHP 计算 $POST['options'] 并“手动”添加具有相同索引的新“行”输入。这是一个常见的陷阱,所以你只需要考虑一下,如果这是你在某个时候所追求的。