Html / PHP的 – 表单 – input数组

我有这样的表格

<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]”等等,但是因为这些元素是dynamic添加的,所以很难添加一个索引。 有没有其他的方法?

编辑:

正如所build议的,我改变了我的forms。 我现在也包括了我的整个HTML,因为我觉得我在这里错过了一些东西。 我的HTML现在:

 <div class="form-group"> <label class="col-md-2">Name(zB 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(zB 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 ) ) 

编辑2:

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

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

我想这会有点工作,但看起来还是很复杂的。 没有更好的办法?

只需将[]添加到像这样的名称

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

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

然后,您可以根据需要dynamic添加这些内容,而不必提供索引。 PHP将会像你预期的场景例子一样提取它们。

编辑

对不起,我有错误的地方括号,这将使每个新的价值作为一个新的数组元素。 现在使用更新的代码,这会给你下面的数组结构

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

两个子arrays上的相同索引会给你一对。 例如

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

如果你可以索引数组,你可以这样做:

 <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 ) ) 

但是,如果从表单中间删除一对input(dynamic地,我想),除非更新input名称,否则将会在数组中出现漏洞。

另外:对于那些有一个空的POSTvariables的人,不要使用这个:

 name="[levels][level][]" 

而是使用它(因为它已经在这个例子中):

 name="levels[level][]" 

HTML:使用名称

 <input name="levels[level][]"> <input name="levels[build_time][]"> 

PHP:

 $array = filter_input_array(INPUT_POST); $newArray = array(); foreach (array_keys($array) as $fieldKey) { foreach ($array[$fieldKey] as $key=>$value) { $newArray[$key][$fieldKey] = $value; } } 

$ newArray将会保存你想要的数据

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