Wie die POST-Daten wie in einem indizierten array von arrays (ohne Angabe von Indizes)
ich habe einige problem mit der posting-Daten als array von Arrays. Dies ist, wie ich möchte, dass meine Daten VERÖFFENTLICHT werden:
array(
['someName'] =>
array([0] =>
array(['description'] =>890
['valore'] =>444)
[1] =>
array(['description'] =>98090
['value'] =>77)
)
Ich weiß, ich kann erreichen, wenn mein html sieht so aus:
<input type='text' name="someName[0][value]">
<input type='text' name="someName[0][description]">
<input type='text' name="someName[1][value]">
<input type='text' name="someName[1][description]">
Mein problem ist, dass die input-Felder sind auf Zeilen einer Tabelle und die Benutzer können hinzufügen/entfernen Sie so viele Zeilen, wie er will, also kann ich keine festen index (oder ich ändern die Namen der input-Felder jedes mal, wenn eine Zeile Hinzugefügt wird, da jedes mal, wenn ich eine Zeile hinzufügen, die ich Klon die Obere Zeile in der Tabelle)
Also, was ich Frage, ist eines dieser beiden Dinge:
1) gibt es eine Möglichkeit, post-Daten, wie ich will, ohne definieren Sie einen index
2)wenn nicht, wie kann ich das ändern dynamisch den neuen input-Feld, so dass Sie einen aktualisierten Namen mit dem neuen index?
BEARBEITEN - ich hatte bereits versucht, mit name="someName[value][]"
und name="someName[description][]"
aber die Ausgabe ist nicht die gewünschte:
array(['terreniOneri'] =>
array(['descrizione'] =>array([0] =>890
[1] => 98090)
['valore'] =>array([0] =>444
[1] =>677)
)
ich weiß, ich kann die Iteration über das array in php ich Frage mich, ob ich könnte es vermeiden.
- Kommentierung, da keine Zeit für eine umfassende Antwort: Eher als das kopieren in der oberen Zeile, die Sie erzeugen könnte eine Vorlage Zeile in eine variable (zB
var template='<tr><td><input name=someName[%%ROWNUM%%][description]>...</td></tr>
und ersetzen Sie alle vorkommen von%%ROWNUM%%
mit dem nächsten index, den Sie möchten (Sie müssen zum nachverfolgen der Zählung). Dann jquery zu bauen, die als HTML, und fügen Sie am Ende Ihrer Tabelle. - ich brauche Klonen Sie die Zeile, weil "irgendetwas" kann variieren, abhängig von der Zeile und so kann ich nicht hartcodieren. Was soll ich tun (aber ich weiß nicht, wie es zu tun) ist die Veränderung des index in den Namen (nur die Zahl) in der neuen Zeile (also dass, wenn ich irgendetwas[1][Beschreibung] in der orginal-Reihe, hat die Kopie name[2][Beschreibung]) Kein problem, wenn die Subtraktion, wie Sie darauf hingewiesen!
- Nun, man kann immer "irgendetwas" eine template-variable zu oder speichern Sie verschiedene Vorlagen für unterschiedliche Zwecke, etc. Sobald du spielst mit javascript sollten Sie in der Lage zu tun, was Sie wirklich wollen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mach es so wie du in der Frage. Wenn der Benutzer löscht einige Zeilen -, Formular-Elemente wäre:
Aber es gibt kein problem, ein array zu Durchlaufen, die mit nicht-zusammenhängenden numerischen Indizes in php: verwenden Sie ein
foreach
Schleife.Wenn Sie brauchen, um zu wissen, die Anzahl der jede Zeile als einen fortlaufenden index (in dem Beispiel, Zeile 0 immer noch 0 sein, aber Zeile 2 sollte 1 sein (wenn der Benutzer eine Zeile gelöscht), können Sie eine variable als ein counter:
Ich denke, dieser Ansatz hat mehr Sinn, dass die anderen Lösungen, als auf diese Weise würden Sie haben eine Reihe von Elementen, wobei jedes Element einen Wert und eine Beschreibung, statt zwei separate arrays von Werten und Beschreibungen und dass die Werte für Ihren Artikel aus diesen zwei arrays statt einer.
edit: hab ich geändert, das erste Stück code, der
<form>
element. Dies wäre die dazugehörige js Funktion:name="somename[%%INDEX%%][value]
). Sie erfassen dieonsubmit
- Ereignis des Formulars, und klicken Sie dann für jedeinput
Sie haben in der form, ersetzen Sie %%INDEX%% mit einem Zähler. Nachteil von diesem Ansatz ist, dass, wenn einige user js deaktiviert hat (wir existieren), würde der code nur die Letzte Zeile (wie jede Zeile überschreiben die vorherigen (würden alle haben den gleichen index).Versuchen wie diesem:
Wenn die Felder sind gekoppelt, Sie kann befestigt werden, indem die Indizes. Also, wenn Sie die Zeile 10, someNameValue[9] und someNameDescription[9] werden ein paar. Sie können Sie Zusammenführen.
BEARBEITEN:
Sie nicht haben, um schreiben Sie die Indizes manuell, werden Sie automatisch generiert.
und
wird das gleiche Ergebnis in deinem post array.
someName['value'][]
undsomeName['description'][]
. Sie können dann diese in das array, das Sie wollen, über ein paar Zeilen von php.someNameValue[]
undsomeNameDexcription[]
natürlich habe ich mit zwei verschiedenen arrays und das ist nicht das, was ich will. Wenn ichsomeName['value'][]
undsomeName['description'][]
es ist etwas, was ich versuchte, aber es nicht geben, was ich mir Wünsche (ich werde über den Ausgang)