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