У меня есть форма, подобная той, которая приведена ниже, которая отправляется на адрес 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, а электронная почта – mail1 , спасибо
Имя name2, а электронная почта – электронная почта2 , спасибо
Имя name3, а электронная почта – электронная почта3 , спасибо
спасибо за любую помощь или совет
Они уже находятся в массивах: $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);
Что делать, если у вас есть массив полей?
<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 [], поле3 []
Вы можете получить доступ к каждому из этих полей динамически. Поскольку каждое поле будет массивом, связанные поля будут иметь общий ключ массива. Например, данные входных данных:
Боб и его электронная почта и секс будут делиться одним и тем же ключом. Имея это в виду, вы можете получить доступ к данным в цикле for следующим образом:
for($x = 0; $x < count($first_name); $x++ ) { echo $first_name[$x]; echo $email[$x]; echo $sex[$x]; echo "<br/>"; }
Это также масштабируется. Все, что вам нужно сделать, это добавить свои соответствующие массивы, когда вам понадобятся новые поля.
Я знаю его немного позже, но вы можете сделать что-то вроде этого:
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, eg //$_POST['keys'] = "values" would be in the array as "keys"=>"values" $return[$key] = $value; } //Return the created array return $return; }
Тест с:
if (isset($_POST['submit'])) { var_dump(AddToArray($_POST)); }
Это для меня было сделано:
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)
Тем не менее, решение 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.
Тем не менее, вы можете использовать код ниже,
$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>'; }
Использование этого метода должно работать:
$name = $_POST['name']; $email = $_POST['account']; while($explore=each($email)) { echo $explore['key']; echo "-"; echo $explore['value']; echo "<br/>"; }