Mehrdimensionales Array erstellen

nick_beat20

Grünschnabel
Hallo zusammen,
ich habe eine Funktion gebaut, mit der bei dem aktivieren diverser Checkboxen, jeweils eine neue Zeile, bestehend aus diversen Formularfeldern, eingefügt wird.

Code:
				<script type="text/javascript">
				
						var RowID = 0;
					
						function AddRow(part_id,part_beschreibung,kategorie) {
						RowID++;
						
						var label = new Element('label', {'for': part_id + 'anzahl', 'style': 'display: block; width: 300px; height: 18px; float: left; line-height: 18px; padding-left: 5px; margin-right: 15px; background-color: #999999;'}).update(part_beschreibung);
						var input_anzahl = new Element('input', {'type': 'text','id': part_id + 'anzahl','name': part_id + 'anzahl'});
						var input_preis = new Element('input', {'type': 'text','id': part_id + 'preis','name': part_id + 'preis'});
						var remove_link = new Element('a', { 'class': 'foo', href: '#', onclick: 'RemoveRow(' + RowID + ')' }).update("entfernen");
						
						var a = new Element('div', { 'id': 'feld' + RowID + '' })
						
						$('Posten' + kategorie + 'List').insert ({'bottom' : a });
						
						$('feld' + RowID).writeAttribute("style","border-bottom: 1px #999999 dotted; padding-top: 15px; padding-bottom: 15px;");
						
						$('feld' + RowID).insert ({'bottom' : label });
						$('feld' + RowID).insert ({'bottom' : input_anzahl });
						$('feld' + RowID).insert ({'bottom' : input_preis });
						$('feld' + RowID).insert ({'bottom' : remove_link });
						
						$(part_id + 'anzahl').writeAttribute("value","test");
						$(part_id + 'anzahl').writeAttribute("style","border: 1px #669900 solid; margin-right: 15px; width: 30px;");
						
						$(part_id + 'preis').writeAttribute("value","test");
						$(part_id + 'preis').writeAttribute("style","border: 1px #669900 solid; margin-right: 15px;");
		
						}
						
						function RemoveRow(RowID) {
						$('feld' + RowID + '').remove();
						}
					
				</script>

Funktioniert super das ganze. Nun möchte ich gerne, wenn das Formular abgesendet wird, die Daten in meiner PHP Datei verarbeiten. Da aber vorher nicht absehbar ist, wieviele Zeilen eingefügt werden, denke ich mal dass es am besten ist, ein mehrdimensionales Array zu erstellen. Dieses kann dann von meinem PHP-Script ausgelesen und weiterverarbeitet werden.

Nun ist die Frage wie ich in meinem Script ein Array erstelle. Da ich so etwas noch nie gemacht habe und mir Google auch nicht sonderlich weiterhelfen konnte wende ich mich nun an euch.

Danke

Gruß Sven
 
Moin,

ich würde dies über das name-Attribut der Inputs regeln.

Beispiel:
bisher->
Code:
var input_anzahl = new Element('input', {'type': 'text','id': part_id + 'anzahl','name': part_id + 'anzahl'});
neu->
Code:
var input_anzahl = new Element('input', {'type': 'text','id': part_id + 'anzahl','name': 'anzahl['+part_id+']'});

du solltest dann in PHP einen Request-Array anzahl erhalten, den du durchlaufen kannst(die part_id ist dabei der Key der Elemente, falls du diese benötigen solltest)
 
Hey Sven,
vielen Dank für deine produktive Antwort.
Nur sehe ich folgendes Problem, dass ich so die Felder (bis jetzt anzahl + preis) einander zugeordnet bekomme. Ich hatte mir das irgendwie so in der Art gedacht:

row[part_id][anzahl]
row[part_id][preis]
usw.

Ist das ein Denkfehler meinerseits?

Danke

Gruß Sven
 
So kannst du es auch machen, wenn es besser passt für dich :)

Code:
var input_anzahl = new Element('input', {'type': 'text','id': part_id + 'anzahl','name': 'row['+part_id+'][anzahl]'});
 
OK. So habe ich mir das gedacht. Das Ding ist jetzt nur dass wenn ich das Array in meiner foreach-Schleife durchlaufen lasse, wird mir nur "ArrayArrayArray" ausgeworfen.

So sieht die Schleife aus:

PHP:
foreach( $row as $part_id => $s ) {
  echo $s;  
}

Gibt es da was besonderes was ich beachten muss?

Gruß Sven
 
$s beinhaltet in deinem Fall ja wiederum einen Array mit den Elementen anzahl und preis, der Durchlauf müsste also so aussehen:
Code:
foreach( $row as $part_id => $part ) {
  echo $part['anzahl'].'/'.$part['preis'];  
}
 
:) Ich danke Dir Sven. Ich beneide Dich um Dein Wissen. Damit kann ich jetzt weiterarbeiten. Also nochmal vielen vielen Dank.

Gruß Sven
 

Neue Beiträge

Zurück