数组自动索引的固定访问器

时间:2014-03-20 18:09:16

标签: php

我使用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[](最后添加的条目)而不增加它?

1 个答案:

答案 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';

See how it 'works'

相关问题