У меня есть форма как та, ниже которой отправляется на contacts.php, и пользователь может динамично добавить больше с 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[]" />
Если я повторяю их в php с кодом ниже
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $v ) {
print $v;
}
foreach( $email as $v ) {
print $v;
}
Я получу что-то вроде этого:
name1name2name3email1email2email3
как я могу получить те массивы во что-то как код ниже
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);
таким образом, мой вывод похож на это:
Имя является name1, и электронная почта является email1, спасибо
Имя является name2, и электронная почта является email2, спасибо
Имя является name3, и электронная почта является email3, спасибо
спасибо за любую справку или совет
Они уже находятся в массивах: $ name
- это массив, как и $ email
Итак, все, что вам нужно сделать, это добавить немного обработки для атаки на оба массива:
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $key => $n ) {
print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}
Чтобы обработать больше входных данных, просто расширите шаблон:
$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";
}
Например. присвоив полям имя
<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]" />
(что также возможно при добавлении элементов через javascript)
Соответствующий скрипт php может выглядеть как
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);
Однако, решение VolkerK является лучшим, чтобы избежать пропущенной пары между электронной почтой и именем пользователя. Поэтому вы должны сгенерировать HTML код с помощью PHP, как это:
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
Измените $total_data в соответствии с вашими потребностями. Чтобы показать это, просто вот так:
$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);
Предположим, что данные были отправлены методом POST.
Что делать, если у вас есть массив наборов полей?
<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>
Я добавил скрытое поле для подсчета количества наборов полей. Пользователь может добавлять или удалять поля, а затем сохранять их.