2010-03-12 3 views
90

Ich habe ein PHP-Formular, das eine bekannte Anzahl von Spalten hat (zB Top-Durchmesser, Bodendurchmesser, Stoff, Farbe, Menge), hat aber eine unbekannte Anzahl von Zeilen, wie Benutzer können fügen Sie Zeilen nach Bedarf hinzu.Senden einer mehrdimensionalen Array über POST mit PHP

Ich habe entdeckt, wie man jedes der Felder (Spalten) nimmt und sie in ein eigenes Array legt.

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

Also, was ich mit im HTML am Ende ist:

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

Was Ich mag würde jetzt zu tun ist, nehmen alle Zeilen und Spalten, um sie in ein mehrdimensionales Array setzen und eine E-Mail den Inhalt das an den Client (vorzugsweise in einer schön formatierten Tabelle). Ich konnte nicht wirklich verstehen, wie man all diese Eingaben kombiniert und in ein nettes Array auswählt.

An diesem Punkt muss ich versuchen, mehrere 1D-Arrays zu verwenden, obwohl ich die Idee habe, dass die Verwendung eines einzelnen 2D-Arrays eine bessere Praxis als die Verwendung mehrerer 1D-Arrays wäre.

Antwort

131

Auf Vorlage, würden Sie ein Array erhalten, als ob wie folgt erstellt:

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

Allerdings würde ich vorschlagen, Ihre Formularnamen stattdessen in dieses Format zu ändern:

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

Mit diesem Format ist es viel einfacher, die Werte zu durchlaufen.

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

Vielen Dank! Ich hatte angefangen, mich dem zu nähern, obwohl ich die Spalte und die Zeilen umgedreht hatte. – Fireflight

+0

Wie wäre es, wenn Sie Textfelder klonen und keine Kontrolle über das Hinzufügen von Namen für die Liste haben wie 'name =" Durchmesser [0] [top] 'Was kann ich tun, wenn ich mehr als einen Namen habe? links und rechts? @DisgruntledGoat –

15

Sie alle Parameter mit einer solchen Namensgebung einreichen könnte:

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

dann später tun Sie etwas wie folgt aus:

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