2010-07-23 40 views
69

Tôi có một biểu mẫu giống như biểu mẫu bên dưới được đăng lên contacts.php và người dùng có thể thêm động bằng jquery.Cách lấy mảng nhập biểu mẫu vào mảng PHP

<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[]" /> 

Nếu tôi vang chúng ra trong php với mã dưới đây

$name = $_POST['name']; 
$email = $_POST['account']; 

foreach($name as $v) { 
print $v; 
} 

foreach($email as $v) { 
print $v; 
} 

tôi sẽ nhận được một cái gì đó như thế này:

name1name2name3email1email2email3

làm thế nào tôi có thể nhận được những mảng thành nội dung như mã bên dưới

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

nên đầu ra của tôi là như thế này:

Tên là name1 và email là Email1, cảm ơn bạn
Tên là name2 và email là email2, cảm ơn bạn
Tên là name3 và email là email3, cảm ơn bạn

cảm ơn bạn cho bất kỳ sự giúp đỡ hoặc tư vấn

Trả lời

117

Họ đã có trong mảng: $name là một mảng, như là $email

Vì vậy, tất cả những gì bạn cần làm là thêm một chút xử lý để tấn công cả hai mảng:

$name = $_POST['name']; 
$email = $_POST['account']; 

foreach($name as $key => $n) { 
    print "The name is ".$n." and email is ".$email[$key].", thank you\n"; 
} 

Để xử lý nhiều đầu vào, chỉ cần mở rộng các mô hình:

$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"; 
} 
+0

cảm ơn bạn, những gì nếu tôi thêm một đầu vào như vị trí [], làm thế nào tôi có thể thêm rằng trong không? – thom

+1

Về cơ bản, bạn chỉ cần mở rộng mẫu. Xem sửa đổi của tôi ở trên ... bất kỳ đầu vào bổ sung cũng sẽ được mảng khi bạn gán chúng từ $ _POST (giả sử có nhiều đầu vào với tên đó trong html, như bạn đã làm với các lĩnh vực này). –

+0

cảm ơn bạn rất nhiều, hoàn hảo – thom

37

Ví dụ: bằng cách đặt tên các lĩnh vực như

<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]" /> 

(mà cũng có thể khi thêm các yếu tố thông qua javascript)

Các php script tương ứng có thể trông như

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); 
0

Tuy nhiên, giải pháp VolkerK là tốt nhất để tránh cặp bỏ lỡ giữa email và tên người dùng. Vì vậy, bạn phải tạo mã HTML bằng PHP như sau:

<? foreach ($i = 0; $i < $total_data; $i++) : ?> 
    <input type="text" name="name[<?= $i ?>]" /> 
    <input type="text" name="email[<?= $i ?>]" /> 
<? endforeach; ?> 

Thay đổi $ total_data cho phù hợp với nhu cầu của bạn. Để hiển thị nó, giống như thế này:

$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); 

Giả sử dữ liệu được gửi bằng phương thức POST.

2

Điều gì sẽ xảy ra nếu bạn có một loạt các trường?

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

Tôi đã thêm trường ẩn để đếm số lượng các trường. Người dùng có thể thêm hoặc xóa các trường và sau đó lưu.

1

Tôi cũng gặp phải vấn đề này. Cho 3 yếu tố đầu vào: trường [], trường2 [], trường3 []

Bạn có thể truy cập từng trường này theo cách động. Vì mỗi trường sẽ là một mảng, các trường liên quan sẽ chia sẻ cùng một khóa mảng. Ví dụ, với dữ liệu đầu vào:

Bob và email và quan hệ tình dục của ông sẽ chia sẻ cùng Chìa khóa. Với ý nghĩ này, bạn có thể truy cập dữ liệu trong vòng lặp for như sau:

for($x = 0; $x < count($first_name); $x++) 
    { 
     echo $first_name[$x]; 
     echo $email[$x]; 
     echo $sex[$x]; 
     echo "<br/>"; 
    } 

Quy mô này là tốt. Tất cả những gì bạn cần làm là thêm các vars mảng tương ứng bất cứ khi nào bạn cần thêm các trường mới.

-2

Sử dụng phương pháp này nên làm việc:

$name = $_POST['name']; 
$email = $_POST['account']; 
while($explore=each($email)) { 
    echo $explore['key']; 
    echo "-"; 
    echo $explore['value']; 
    echo "<br/>"; 
} 
+0

Giải thích bước trả lời của bạn theo từng bước – krisdestruction

+0

Chi tiết hơn – krisdestruction

1

Tôi biết nó hơi muộn bây giờ, nhưng bạn có thể làm một cái gì đó như thế này:

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

Các thử nghiệm với:

if (isset($_POST['submit'])) { 
    var_dump(AddToArray($_POST)); 
} 

Điều này cho tôi được sản xuất:

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

Tuy nhiên, bạn có thể sử dụng dưới mã như,

$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ác vấn đề liên quan