J'ai un formulaire comme celui ci-dessous qui est posté à contacts.php, et l'utilisateur peut ajouter dynamiquement plus avec jQuery.
<input type="text" name="name[]" />
<input type="text" name="email[]" />
<input type="text" name="name[]" />
<input type="text" name="email[]" />
<input type="text" name="name[]" />
<input type="text" name="email[]" />
Si je les renvoie en php avec le code ci-dessous
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $v ) {
print $v;
}
foreach( $email as $v ) {
print $v;
}
Je vais obtenir quelque chose comme ça:
nom1nom2nom3email1email2email3
comment puis-je obtenir ces tableaux dans quelque chose comme le code ci-dessous
function show_Names($n, $m)
{
return("The name is $n and email is $m, thank you");
}
$a = array("name1", "name2", "name3");
$b = array("email1", "email2", "email3");
$c = array_map("show_Names", $a, $b);
print_r($c);
donc ma sortie est comme ça:
Le nom est nom1 et le courrier électronique est email1, Je vous remercie
Le nom est nom2 et le courrier électronique est email2, Je vous remercie
Le nom est nom3 et le courrier électronique est email3, Je vous remercie
merci pour toute aide ou conseil
Ils sont déjà dans des tableaux: $name
est un tableau, de même que $email
Donc, tout ce que vous avez à faire est d’ajouter un peu de traitement pour attaquer les deux tableaux:
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $key => $n ) {
print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}
Pour gérer plus d'entrées, il suffit d'étendre le motif:
$name = $_POST['name'];
$email = $_POST['account'];
$location = $_POST['location'];
foreach( $name as $key => $n ) {
print "The name is ".$n.", email is ".$email[$key].
", and location is ".$location[$key].". Thank you\n";
}
Par exemple. en nommant les champs comme
<input type="text" name="item[0][name]" />
<input type="text" name="item[0][email]" />
<input type="text" name="item[1][name]" />
<input type="text" name="item[1][email]" />
<input type="text" name="item[2][name]" />
<input type="text" name="item[2][email]" />
(ce qui est également possible lors de l'ajout d'éléments via javascript)
Le script php correspondant pourrait ressembler à
function show_Names($e)
{
return "The name is $e[name] and email is $e[email], thank you";
}
$c = array_map("show_Names", $_POST['item']);
print_r($c);
Je sais que c'est un peu tard maintenant, mais vous pouvez faire quelque chose comme ceci:
function AddToArray ($post_information) {
//Create the return array
$return = array();
//Iterate through the array passed
foreach ($post_information as $key => $value) {
//Append the key and value to the array, e.g.
//$_POST['keys'] = "values" would be in the array as "keys"=>"values"
$return[$key] = $value;
}
//Return the created array
return $return;
}
Le test avec:
if (isset($_POST['submit'])) {
var_dump(AddToArray($_POST));
}
Ceci pour moi a produit:
array (size=1)
0 =>
array (size=5)
'stake' => string '0' (length=1)
'odds' => string '' (length=0)
'ew' => string 'false' (length=5)
'ew_deduction' => string '' (length=0)
'submit' => string 'Open' (length=4)
Et si vous avez un tableau d'ensembles de champs?
<fieldset>
<input type="text" name="item[1]" />
<input type="text" name="item[2]" />
<input type="hidden" name="fset[]"/>
</fieldset>
<fieldset>
<input type="text" name="item[3]" />
<input type="text" name="item[4]" />
<input type="hidden" name="fset[]"/>
</fieldset>
J'ai ajouté un champ caché pour compter le nombre de champs. L'utilisateur peut ajouter ou supprimer les champs puis les sauvegarder.
J'ai aussi rencontré ce problème. Étant donné 3 entrées: champ [], champ2 [], champ3 []
Vous pouvez accéder à chacun de ces champs de manière dynamique. Étant donné que chaque champ sera un tableau, les champs associés partageront tous la même clé de tableau. Par exemple, données d'entrée:
Bob, son email et son sexe partageront la même clé. Dans cet esprit, vous pouvez accéder aux données dans une boucle for comme ceci:
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
Cette balance aussi. Tout ce que vous avez à faire est d’ajouter vos tableaux respectifs lorsque vous avez besoin de nouveaux champs.
Cependant, la solution de VolkerK est la meilleure solution pour éviter tout couple manquant entre email et nom d'utilisateur. Vous devez donc générer du code HTML avec PHP comme ceci:
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
Modifiez $ total_data selon vos besoins. Pour le montrer, juste comme ça:
$output = array_map(create_function('$name, $email', 'return "The name is $name and email is $email, thank you.";'), $_POST['name'], $_POST['email']);
echo implode('<br>', $output);
En supposant que les données ont été envoyées à l'aide de la méthode POST.
Néanmoins, vous pouvez utiliser le code ci-dessous en tant que,
$a = array('name1','name2','name3');
$b = array('email1','email2','email3');
function f($a,$b){
return "The name is $a and email is $b, thank you";
}
$c = array_map('f', $a, $b);
//echoing the result
foreach ($c as $val) {
echo $val.'<br>';
}
C'est facile:
foreach( $_POST['field'] as $num => $val ) {
print ' '.$num.' -> '.$val.' ';
}