procesar - formulario html y php juntos
Html/PHP-Formulario-Ingresar como matriz (4)
Tengo un formulario como este
<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>
Lo que me gustaría tener como salida $ _POST es una matriz como
Array (
[1] => Array ( [level] => 1 [build_time] => 123 )
[2] => Array ( [level] => 2 [build_time] => 456 )
)
Sé que podría hacer algo como name = "levels [1] [build_time]" y así sucesivamente, pero dado que estos elementos se agregan dinámicamente, sería difícil agregar un índice. ¿Hay alguna otra manera?
EDITAR:
Como se sugirió, cambié mi formulario. También incluí todo mi HTML ahora, porque creo que me falta algo aquí. Mi HTML ahora:
<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>
El resultado que obtengo ahora es:
[levels] => Array (
[0] => Array ( [level] => 1 )
[1] => Array ( [build_time] => 234 )
[2] => Array ( [level] => 2 )
[3] => Array ( [build_time] => 456 )
)
Editar 2:
Como sugerí en su edición, edité mi formulario y moví los corchetes al final del nombre. El resultado que obtengo ahora es:
[levels] => Array (
[level] => Array (
[0] => 1
[1] => 2
)
[build_time] => Array (
[0] => 234
[1] => 456
)
)
Supongo que funcionaría un poco, pero parece complicado. ¿No hay mejor manera?
Además: para aquellos que tienen una variable POST vacía, no use esto:
name="[levels][level][]"
más bien use esto (como ya está aquí en este ejemplo):
name="levels[level][]"
HTML: use nombres como
<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 guardará los datos como quieras
Array (
[0] => Array ( [level] => 1 [build_time] => 123 )
[1] => Array ( [level] => 2 [build_time] => 456 )
)
Si está bien que indexe la matriz, puede hacer esto:
<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>
... para lograr eso:
[levels] => Array (
[0] => Array (
[level] => 1
[build_time] => 2
)
[1] => Array (
[level] => 234
[build_time] => 456
)
[2] => Array (
[level] => 111
[build_time] => 222
)
)
Pero si eliminas un par de entradas (dinámicamente, supongo) del centro del formulario, obtendrás agujeros en tu matriz, a menos que actualices los nombres de las entradas ...
Simplemente agregue []
a esos nombres como
<input type="text" class="form-control" placeholder="Titel" name="levels[level][]">
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time][]">
Toma esa plantilla y luego puedes agregarla incluso usando un bucle.
Luego puede agregarlos dinámicamente tanto como desee, sin tener que proporcionar un índice. PHP los recogerá como su ejemplo de escenario esperado.
Editar
Lamento tener frenos en el lugar equivocado, lo que haría que cada nuevo valor sea un nuevo elemento de matriz. Utilice el código actualizado ahora y esto le dará la siguiente estructura de matriz
levels > level (Array)
levels > build_time (Array)
El mismo índice en ambos subordenadores le dará su par. Por ejemplo
echo $levels["level"][5];
echo $levels["build_time"][5];