J'ai un formulaire comme celui-ci
<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>
Ce que j'aimerais avoir comme sortie $ _POST est un tableau comme
Array (
[1] => Array ( [level] => 1 [build_time] => 123 )
[2] => Array ( [level] => 2 [build_time] => 456 )
)
Je sais que je pourrais faire quelque chose comme name = "levels [1] [build_time]", etc., mais comme ces éléments sont ajoutés de façon dynamique, il serait difficile d'ajouter un index. Est-ce qu'il y a un autre moyen?
EDIT:
Comme suggéré, j'ai changé ma forme. J'ai également inclus tout mon code HTML maintenant, car je pense qu'il me manque quelque chose ici. Mon HTML maintenant:
<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>
Le résultat que je reçois maintenant est:
[levels] => Array (
[0] => Array ( [level] => 1 )
[1] => Array ( [build_time] => 234 )
[2] => Array ( [level] => 2 )
[3] => Array ( [build_time] => 456 )
)
Edit 2:
Comme suggéré dans votre modification, j'ai modifié mon formulaire et déplacé les crochets à la fin du nom. Le résultat que je reçois maintenant est:
[levels] => Array (
[level] => Array (
[0] => 1
[1] => 2
)
[build_time] => Array (
[0] => 234
[1] => 456
)
)
Je suppose que cela fonctionnerait un peu, mais cela semble quand même compliqué. Pas de meilleur moyen?
Ajoutez simplement []
à ces noms comme
<input type="text" class="form-control" placeholder="Titel" name="levels[level][]">
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time][]">
Prenez ce modèle et vous pourrez ensuite les ajouter, même en utilisant une boucle.
Vous pouvez ensuite les ajouter autant de fois que vous le souhaitez, sans avoir à fournir d’index. PHP les récupérera comme dans l'exemple de scénario attendu.
Éditer
Désolé, j'avais des accolades au mauvais endroit, ce qui ferait de chaque nouvelle valeur un nouvel élément de tableau. Utilisez le code mis à jour maintenant et cela vous donnera la structure de tableau suivante
levels > level (Array)
levels > build_time (Array)
Le même index sur les deux sous-tableaux vous donnera votre paire. Par exemple
echo $levels["level"][5];
echo $levels["build_time"][5];
Si vous pouvez indexer le tableau, vous pouvez le faire:
<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>
... pour y parvenir:
[levels] => Array (
[0] => Array (
[level] => 1
[build_time] => 2
)
[1] => Array (
[level] => 234
[build_time] => 456
)
[2] => Array (
[level] => 111
[build_time] => 222
)
)
Mais si vous supprimez une paire d'entrées (dynamiquement, je suppose) du milieu du formulaire, vous obtiendrez des trous dans votre tableau, à moins que vous ne mettiez à jour les noms des entrées ...
HTML: Utiliser les noms comme
<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 conservera les données que vous voulez
Array (
[0] => Array ( [level] => 1 [build_time] => 123 )
[1] => Array ( [level] => 2 [build_time] => 456 )
)
en plus: pour ceux qui ont une variable vide POST, n'utilisez pas ceci:
name="[levels][level][]"
utilisez plutôt ceci (comme c'est déjà le cas dans cet exemple):
name="levels[level][]"