Schlaufen synchronisieren

luke_the_duke

Erfahrenes Mitglied
Hallo zusammen!

In meiner Applikation kann sich der Benutzer Hotelzimmer mit Zusätzen etc. buchen, die Eingabe der Daten erfolgt über Checkboxen uvm. Die Eingabe wird laufend in einer Datenstruktur gespeichert, die mit Objekten und Arrays arbeitet. Nun muss ich, um die Daten an den Server zu schicken, die ganze Geschichte in einen zweidimensionalen Array umschreiben, der dann verschlüsselt wird. Mein Problem: Das Zusammenstellen des Arrays erfolgt über drei Schlaufen, die ineinander laufen. Wenn ich mir die Ergebnisse ausgeben lasse, dann siehts so aus, als ob die Schlaufen synchron wären, d.h. während i = 1 läuft die Schlaufe j für i*j mal durch und dann erst erfolgt i++ ;). Der Array macht dann aber eher nen chaotischen Eindruck. Hat jemand eine Idee, wie ich das angehen kann?

Leider kann ich den Code nur sehr bedingt posten. Hier auf jeden Fall mal die Schlaufen

PHP:
for (name in this.Waren) {
	if (this.Waren[name].Anzahl.length>0) {
		//trace("Anzahl "+name+" "+this.Waren[name].Anzahl.length);
		for (i=0; i<this.Waren[name].Anzahl.length; i++) {
			//trace("	Gebuchte Personen: "+"Zimmer "+i+", "+this.Waren[name].Anzahl[i].anzahlPersonen);
				basket.push([this.Waren[name].roomId+"-"+this.Waren[name].Anzahl[i].anzahlPersonen, new Array()]);
			for (j=0; j<this.Waren[name].Anzahl[i].Addons.length; j++) {
				if (this.Waren[name].Anzahl[i].Addons[j].nr>0) {
						basket[i][1].push(this.Waren[name].Anzahl[i].Addons[j].Id+"-"+this.Waren[name].Anzahl[i].Addons[j].nr);
				//trace("		AddOn: "+this.Waren[name].Anzahl[i].Addons[j].Id+"-"+this.Waren[name].Anzahl[i].Addons[j].nr);
			}
		}
	}
}

Gruss
 
Hi,

:eek: auf den ersten Blick kommt mir das (obgleich nicht unbedingt fehlerhaft) sehr unübersichtlich vor. Ich würde Dir empfehlen, Zwischenergebnisse in temporären Variablen abzulegen; dann sieht auch ein Aussenstehender, was nun in die Arrays geschrieben wird.

Kannst Du vielleicht mal ein Beispiel Deiner vorhandener Datenstruktur (einen Test-Datensatz) posten und dazu ein Beispiel, wie es hinterher in dem Array stehen soll? Ich bin sicher, es gibt eine elegante Methode, die gewünschte Umformung zu realisieren. ;)

Gruß

P.S.: Ich würde "name" nicht als Variablenbezeichner verwenden -> Trunctationgefahr.
.
 
Hallo Datic!

Danke für Deine schnelle Antwort. Ich konnte das Problem unterdessen selbst lösen, der Fehler lag beim immer neu definierten "i" für jeden Namen, dass ich aber dann jeweils auch als absoluten Index im Basket-Array missbrauchen wollte ;). Das klappt natürlich nicht.

Hatte dieser Post mal wieder mehr selbst-therapeutische Züge: Erst posten, dann denken und *schwups* schon seh ich den Fehler ;).

Ich danke Dir auf jeden Fall trotzdem für Deine Anteilnahme.

Gruss

PS: Der Iterator name wird bei mir keine trunctations verursachen, er ist gewollt eingesetzt. Bei der Verwendung von name in einer for..in-Schlaufe wird jedes Element im durchsuchten Objekt angesprochen, unabhängig vom Typ des jeweiligen Elements.
 
Bei der Verwendung von name in einer for..in-Schlaufe wird jedes Element im durchsuchten Objekt angesprochen, unabhängig vom Typ des jeweiligen Elements.
Sicher, aber unabhängig vom Bezeichner des Iterators. ;) ich nehme z.B. meistens "i" ...

Gruß
.
 
Zurück