Как получить входной массив формы в массив PHP

У меня есть форма как та, ниже которой отправляется на 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, спасибо

спасибо за любую справку или совет

88
задан osullic 15 December 2016 в 11:30
поделиться

4 ответа

Они уже находятся в массивах: $ 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";
}
142
ответ дан 24 November 2019 в 07:30
поделиться

Например. присвоив полям имя

<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);
46
ответ дан 24 November 2019 в 07:30
поделиться

Однако, решение 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.

0
ответ дан 24 November 2019 в 07:30
поделиться

Что делать, если у вас есть массив наборов полей?

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

Я добавил скрытое поле для подсчета количества наборов полей. Пользователь может добавлять или удалять поля, а затем сохранять их.

2
ответ дан 24 November 2019 в 07:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: