2010-03-12 41 views
90

Tôi có một biểu mẫu php có một số cột đã biết (ví dụ: đường kính trên cùng, đường kính dưới, vải, màu, số lượng), nhưng có số hàng không xác định, vì người dùng có thể thêm hàng khi cần.Gửi một mảng đa chiều qua POST với php

Tôi đã khám phá cách lấy từng trường (cột) và đặt chúng vào một mảng của riêng chúng.

<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" /> 
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" /> 

Vì vậy, những gì tôi kết thúc với trong HTML là:

<tr> 
    <td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td> 
    <td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td> 
</tr> 
<tr> 
    <td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td> 
    <td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td> 
</tr> 

...and so on. 

Những gì tôi muốn làm bây giờ là đưa tất cả các hàng và cột đặt chúng vào một mảng đa chiều và gửi email cho các nội dung của cho khách hàng (tốt nhất là trong một bảng được định dạng độc đáo). Tôi đã không thể thực sự hiểu làm thế nào để kết hợp tất cả những đầu vào và chọn vào một mảng tốt đẹp. Tại thời điểm này, tôi sẽ phải cố gắng sử dụng một số mảng 1D, mặc dù tôi có ý tưởng rằng việc sử dụng một mảng 2D sẽ là một thực hành tốt hơn so với sử dụng một vài mảng 1D.

Trả lời

131

Mở trình, bạn sẽ nhận được một mảng như thể được tạo ra như thế này:

$_POST['topdiameter'] = array('first value', 'second value'); 
$_POST['bottomdiameter'] = array('first value', 'second value'); 

Tuy nhiên, tôi khuyên bạn nên thay đổi tên biểu mẫu của bạn thành định dạng này thay thế:

name="diameters[0][top]" 
name="diameters[0][bottom]" 
name="diameters[1][top]" 
name="diameters[1][bottom]" 
... 

Sử dụng định dạng đó, dễ dàng hơn để lặp qua các giá trị.

if (isset($_POST['diameters'])) 
{ 
    echo '<table>'; 
    foreach ($_POST['diameters'] as $diam) 
    { 
     // here you have access to $diam['top'] and $diam['bottom'] 
     echo '<tr>'; 
     echo ' <td>', $diam['top'], '</td>'; 
     echo ' <td>', $diam['bottom'], '</td>'; 
     echo '</tr>'; 
    } 
    echo '</table>'; 
} 
+0

Cảm ơn! Tôi đã bắt đầu tiến gần đến điều này, mặc dù tôi đã có cột và hàng lộn. – Fireflight

+0

Làm thế nào về nếu bạn đang nhân bản các trường văn bản và không có quyền kiểm soát trong việc thêm tên cho danh sách như 'name =" đường kính [0] [top] 'tôi có thể làm gì nếu tôi có nhiều hơn một tên? bên trái và bên phải @DisgruntledGoat –

15

bạn có thể nộp tất cả các thông số với cách đặt tên như vậy:

params[0][topdiameter] 
params[0][bottomdiameter] 
params[1][topdiameter] 
params[1][bottomdiameter] 

sau đó bạn làm điều gì đó như thế này:

foreach ($_REQUEST['params'] as $item) { 
    echo $item['topdiameter']; 
    echo $item['bottomdiameter']; 
} 
Các vấn đề liên quan