我使用PHP的数组自动索引来构建表单数据。像:
<input name="users[][name]">
<input name="users[][name]">
<input name="users[][name]">
当我发布此数据时,PHP将自动为users
下的$_POST
创建一个数组。
但是,如果我们需要为每个用户添加另一个字段,例如:
<li>
<input name="users[][name]">
<input name="users[][nickname]">
</li>
<li>
<input name="users[][name]">
<input name="users[][nickname]">
</li>
<li>
<input name="users[][name]">
<input name="users[][nickname]">
</li>
当然,上面的代码将创建6个条目,而不是所需的3个用户条目。
有没有办法访问users[]
(最后添加的条目)而不增加它?
答案 0 :(得分:1)
在HTML方面,唯一能够准确执行所要求的方法是使用计数器变量并使用PHP循环或JS函数将其动态插入到HTML中。
如果这不是一个选项,这是另一种方法。反转括号,以便生成的数组具有公共索引。在这种情况下,前两个输入生成$ _POST [users] [name] [0]和$ _POST [users] [nickname] [0]。然后,使用公共索引在PHP中重新组织数组。如果您需要添加新输入,此解决方案将扩展。
HTML
<li>
<input name="users[name][]">
<input name="users[nickname][]">
</li>
<li>
<input name="users[name][]">
<input name="users[nickname][]">
</li>
<li>
<input name="users[name][]">
<input name="users[nickname][]">
</li>
PHP
<?php
$inputs = $_POST;
$result = array();
//Using a column-row analogy
foreach ($inputs as $columnName => $columnValues)
{
foreach ($columnValues as $rowIndex => $columnValue)
{
$result[$rowIndex][$columnName] = $columnValue;
}
}
print_r($result);
?>
使用自动索引数组时可以对值进行分组。但它是如此黑暗的巫术:
$users = array();
// ...
// wild stuff happening up there
//This will NOT get the last instantiated element
//actually it will append a new element and return the pointer to it (wtf?)
$newUser =& $users[];
$newUser['name'] = 'voodo';
$newUser['nickname'] = 'jacu';