2010-03-12 33 views
90

Tengo una forma php que tiene un número conocido de columnas (por ejemplo, diámetro superior, diámetro inferior, tela, color, cantidad), pero tiene un número desconocido de filas, ya que los usuarios pueden agrega filas cuando lo necesitenEnviar una matriz multidimensional a través de POST con php

He descubierto cómo tomar cada uno de los campos (columnas) y colocarlos en una matriz propia.

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

Así que lo que termino con el HTML es:

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

Lo que me gustaría hacer ahora es tomar todas las filas y columnas de las ponen en una matriz multidimensional y correo electrónico del contenido de eso para el cliente (preferiblemente en una mesa muy bien formateada). No he podido comprender realmente cómo combinar todas esas entradas y seleccionarlas en una buena matriz.

En este punto, voy a tener que intentar usar varias matrices 1D, aunque tengo la idea de que usar una sola matriz 2D sería una mejor práctica que usar varias matrices 1D.

Respuesta

131

En la presentación, se llega a una matriz como si se crea de esta manera:

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

Sin embargo, le sugiero cambiar los nombres de sus formularios a este formato en su lugar:

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

Usando ese formato, es mucho más fácil recorrer los valores.

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

¡Gracias! Empecé a acercarme a esto, aunque hice que se volteara la columna y las filas. – Fireflight

+0

¿Qué tal si está clonando campos de texto y no tiene control al agregar nombres para la lista como 'name =" diameters [0] [top] '¿qué puedo hacer si tengo más de un nombre? Como superior, inferior, ¿Izquierda y derecha? @DisgruntledGoat –

15

usted podría presentar todos los parámetros con tal denominación:

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

luego haces algo como esto:

foreach ($_REQUEST['params'] as $item) { 
    echo $item['topdiameter']; 
    echo $item['bottomdiameter']; 
} 
Cuestiones relacionadas