Html / PHP – Форма – ввод как массив

Я получил такую ​​форму

<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(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:

Как было предложено в вашем редактировании, я отредактировал свою форму и переместил квадратные скобки в конец имени. Выход, который я получаю сейчас:

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

Я предполагаю, что это будет работать, но все равно выглядит сложным. Не лучше?

Solutions Collecting From Web of "Html / PHP – Форма – ввод как массив"

Просто добавьте [] к таким именам, как

  <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]; 

Если вам удобно индексировать массив, вы можете это сделать:

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

Но если вы удалите одну пару входов (динамически, я полагаю) из середины формы, тогда вы получите дыры в вашем массиве, если вы не обновите имена ввода …

кроме того: для тех, у кого есть пустая переменная POST, не используйте это:

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