Mam formularz podobny do poniższego, który jest wysyłany do contacts.php, a użytkownik może dynamicznie dodawać kolejne za pomocą 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[]" />
Jeśli powiem je w php za pomocą poniższego kodu
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $v ) {
print $v;
}
foreach( $email as $v ) {
print $v;
}
Otrzymam coś takiego:
name1name2name3email1email2email3
jak mogę wprowadzić te tablice do czegoś podobnego do poniższego kodu
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);
więc mój wynik wygląda tak:
Imię to name1, a e-mail to email1 , dziękuję
Imię to name2, a email to email2 , dziękuję
Imię to name3, a email to email3 , dziękuję
dziękuję za pomoc lub radę
$emails[1]
jest to nazwa użytkownika$name[1]
? Myślę, że miałem z tym problemy w przeszłości, ale mogę się mylić. DziękiNp. Przez nazwanie pól w stylu
<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]" />
(co jest również możliwe przy dodawaniu elementów przez javascript)
Może wyglądać odpowiedni skrypt 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);
źródło
Wiem, że jest teraz trochę za późno, ale możesz zrobić coś takiego:
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; }
Test z:
if (isset($_POST['submit'])) { var_dump(AddToArray($_POST)); }
To dla mnie wyprodukowało:
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)
źródło
A jeśli masz tablicę zestawów pól?
<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>
Dodałem ukryte pole, aby policzyć liczbę zestawów pól. Użytkownik może dodawać lub usuwać pola, a następnie je zapisać.
źródło
Trafiłem też na ten problem. Biorąc pod uwagę 3 dane wejściowe: pole [], pole2 [], pole3 []
Możesz uzyskać dostęp do każdego z tych pól dynamicznie. Ponieważ każde pole będzie tablicą, wszystkie powiązane pola będą miały ten sam klucz tablicy. Na przykład podane dane wejściowe:
Bob, jego e-mail i płeć będą mieć ten sam klucz. Mając to na uwadze, możesz uzyskać dostęp do danych w pętli for w następujący sposób:
for($x = 0; $x < count($first_name); $x++ ) { echo $first_name[$x]; echo $email[$x]; echo $sex[$x]; echo "<br/>"; }
To również się skaluje. Wszystko, co musisz zrobić, to dodać odpowiednie zmienne tablicy, gdy potrzebujesz dodać nowe pola.
źródło
Jednak rozwiązanie VolkerK jest najlepszym sposobem na uniknięcie pomijania adresu e-mail i nazwy użytkownika. Więc musisz wygenerować kod HTML za pomocą PHP w następujący sposób:
<? foreach ($i = 0; $i < $total_data; $i++) : ?> <input type="text" name="name[<?= $i ?>]" /> <input type="text" name="email[<?= $i ?>]" /> <? endforeach; ?>
Zmień $ total_data według swoich potrzeb. Aby to pokazać, tak po prostu:
$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);
Przy założeniu, że dane zostały przesłane metodą POST.
źródło
Niemniej jednak możesz użyć poniższego kodu jako,
$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>'; }
źródło
To jest łatwe:
foreach( $_POST['field'] as $num => $val ) { print ' '.$num.' -> '.$val.' '; }
źródło
Użycie tej metody powinno działać:
$name = $_POST['name']; $email = $_POST['account']; while($explore=each($email)) { echo $explore['key']; echo "-"; echo $explore['value']; echo "<br/>"; }
źródło