HTML/PHP - 表单 - 以数组形式输入

2022-08-30 09:02:23

我得到了一个这样的表格

<form>
    <input type="text" class="form-control" placeholder="Titel" name="levels[level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[build_time]">

    <input type="text" class="form-control" placeholder="Titel" name="levels[level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[build_time]">
</form>

我希望有$_POST输出一个数组,如下所示:

Array (
  [1] => Array ( [level] => 1 [build_time] => 123 )
  [2] => Array ( [level] => 2 [build_time] => 456 )
)

我知道我可以做一些像name=“levels[1][build_time]”之类的事情,但是由于这些元素是动态添加的,因此很难添加索引。还有别的方法吗?


按照建议,我改变了我的表格。我现在也包含了我的整个HTML,因为我认为我在这里错过了一些东西。我的 HTML 现在:

<div class="form-group">
  <label class="col-md-2">Name(z.B. 1)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]">
  </div>

  <label class="col-md-2">Bauzeit(In Sekunden)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]">
  </div>
</div>

<div class="form-group">
  <label class="col-md-2">Name(z.B. 1)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]">
  </div>

  <label class="col-md-2">Bauzeit(In Sekunden)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]">
  </div>
</div>

我现在得到的输出是:

[levels] => Array (
  [0] => Array ( [level] => 1 )
  [1] => Array ( [build_time] => 234 )
  [2] => Array ( [level] => 2 )
  [3] => Array ( [build_time] => 456 )
)

正如您的编辑中所建议的那样,我编辑了我的表单并将方括号移到了名称的末尾。我现在得到的输出是:

[levels] => Array (
  [level] => Array (
    [0] => 1
    [1] => 2
  )
  [build_time] => Array (
    [0] => 234
    [1] => 456
  )
)

我想这会有点工作,但它仍然看起来很复杂。难道没有更好的方法吗?


答案 1

只需添加到这些名称中,例如[]

 <input type="text" class="form-control" placeholder="Titel" name="levels[level][]">
 <input type="text" class="form-control" placeholder="Titel" name="levels[build_time][]">

采用该模板,然后甚至可以使用循环添加这些模板。

然后,您可以根据需要动态添加这些内容,而无需提供索引。PHP将像您预期的场景示例一样拾取它们。

编辑

对不起,我在错误的地方有大括号,这将使每个新值成为新的数组元素。立即使用更新的代码,这将为您提供以下数组结构

levels > level (Array)
levels > build_time (Array)

两个子数组上的相同索引将为您提供您的对。例如

echo $levels["level"][5];
echo $levels["build_time"][5];

答案 2

如果可以对数组编制索引,则可以执行以下操作:

<form>
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][build_time]">

    <input type="text" class="form-control" placeholder="Titel" name="levels[1][level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[1][build_time]">

    <input type="text" class="form-control" placeholder="Titel" name="levels[2][level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[2][build_time]">
</form>

...要实现此目的:

[levels] => Array (
  [0] => Array (
    [level] => 1
    [build_time] => 2
  )
  [1] => Array (
    [level] => 234
   [build_time] => 456
  )
  [2] => Array (
    [level] => 111
    [build_time] => 222
  )
)

但是,如果您从表单中间删除一对输入(我想是动态的),那么除非您更新输入名称,否则数组中将出现漏洞......


推荐