Logische Schleife geht nicht; habe ich einen Denkfehler ?

Lamavic

Mitglied
Hi,
ich schreibe grad ein kleines neues Script. Da kam ich plötzlich zu folgendem Problem, obwohl ich den Fehler nicht erkenne (Vielleicht liegt's an 4:00 Uhr Nachts ;D):
PHP:
$e = 0;
								while($e < $anz_runden){ // die Anzahl der Maps spiegelt die Anzahl der gelisteten Runden wieder
									$inhalt_runden = str_replace("{mapx}", $map_x[$e], $inhalt_runden);
									$inhalt_runden = str_replace("{resultx}", $result_x[$e], $inhalt_runden);
									$inhalt_runden = str_replace("{teamx}", $team_x[$e], $inhalt_runden);
									echo(stripslashes("<br>".$inhalt_runden));
									$e++;
								}
Es wird zwar korrekt ausgegeben (z.b. 2 mal) über echo; allerdings sind die Werte für die einzelnen Variablen dann immer genau die Gleichen. Also es kommt dann z.b. (wenn $anz_runden 3 ist) :

Map : de_dust
Team : CT Team
Result : 11:1
--
Map : de_dust
Team : CT Team
Result : 11:1

Kommen sollte aber z.b.

Map : de_dust
Team : CT Team
Result : 11:1
--
Map : de_aztec
Team : T Team
Result : 8:4

:/. Wenn ich das Array statt über die Variable $e mit dem direkten Wert 1 bestücke, dann schreibt er mir (korrekt) 2 mal das Arrayelement 1 (also z.b.
Map : de_aztec
Team : T Team
Result : 8:4
--
Map : de_aztec
Team : T Team
Result : 8:4).

Per Echo hab ich auch schon nachgeschaut, ob sie $e auch wirklich verändert. Der Wert ändert sich ansich auch korrekt : er wird 0 und 1.

Falls ihr das grad verstanden habt, wäre ich um eure Hilfe dankbar. Ansonsten geh ich jetzt schlafen. Gute Nacht ;).
 
Hi,
wenn ich das richtig sehe, ersetzt Du in der Variable $inhalt_runden die Platzhalter {mapx}, {resultx} und {teamx}. Aber einmal ersetzt, sind die Platzhalter nicht mehr in der Variable vorhanden und echo gibt beim zweiten Durchlauf den unveränderten String des ersten Durchlaufs zurück.

Gruß, snuu
 
Ich glaube ich weiss woran es liegt. Es sieht so aus, als ob du mit »Templates« arbeitest.
Beim ersten Durchlaf der Schleife werden die Platzhalter in $inhalt_runden mit den Werten der Arrays ersetzt und alles ausgegeben. Jetzt, beim zweiten Durchlauf, gibt es aber keine Platzhalter mehr, da die schon im letzten Durchlauf ersetzt wurde, und der alte Text wird wieder ausgegeben.
Alles in Allem müsstest du zu Anfang der Schleife die Vorlage in einer tempdrären Variable speichern, mit der du dann arbeitest, quasi so:

&nbsp;&nbsp;...
&nbsp;&nbsp;while($e < $anz_runden) {
&nbsp;&nbsp;&nbsp;&nbsp;$inhalt_runden = $template;
&nbsp;&nbsp;&nbsp;&nbsp;$inhalt_runden = str_replace("{mapx}", $map_x[$e], $inhalt_runden);
&nbsp;&nbsp;...
 
Zuerst einmal danke für die raschen antworten.
Aber wenn ich $inhalt_runden = $templates; setze, kommt gar nichts mehr :/.
 
Das dumme ist ja, dass ich bei der Anmeldung statt meinem Real Virtual Nick Ladmavic, das D vergessen habe, und nun als Lamavic hier durchs Forum schleife :/. Naja was soll's ;). Also hier meine Lösung :
Da mir ja in einem der obrigen Posts gesagt wurde, warum 2 mal das Gleiche ausgegeben wurde (eben weil die Platzhalter einfach schon ersetzt waren), hab ich mir gedacht, nun, setzen wir sie doch einfach nach jedem Eintrag nochmal hin, damit man sie wiederrum beim nächsten Durchlauf der Schleife wieder ersetzen kann usw. Dabei kam das raus :

PHP:
$e = 0;
								while($e < $anz_runden){ // die Anzahl der Maps spiegelt die Anzahl der gelisteten Runden wieder
									$nr = $e+1;
									$inhalt_runden = ereg_replace("{nr}", "$nr", $inhalt_runden);
									$inhalt_runden = ereg_replace("{mapx}", $map_x[$e], $inhalt_runden);
									$inhalt_runden = ereg_replace("{resultx}", $result_x[$e], $inhalt_runden);
									$inhalt_runden = ereg_replace("{teamx}", $team_x[$e], $inhalt_runden);
									echo(stripslashes($inhalt_runden));
									$inhalt_runden = ereg_replace("$nr", "{nr}", $inhalt_runden);
									$inhalt_runden = ereg_replace("$map_x[$e]", "{mapx}", $inhalt_runden);
									$inhalt_runden = ereg_replace("$result_x[$e]", "{resultx}", $inhalt_runden);
									$inhalt_runden = ereg_replace("$team_x[$e]", "{teamx}", $inhalt_runden);
									$e++;
								}

mfg Ladmavic
 
Zuletzt bearbeitet:
Hallo, wäre das nicht eleganter?
PHP:
for ($e = 0; $e < $anz_runden; $e++) {
  $tmp_inhalt_runden = $inhalt_runden
  $tmp_inhalt_runden = ereg_replace("{nr}", ($e+1), $tmp_inhalt_runden);
  $tmp_inhalt_runden = ereg_replace("{mapx}", $map_x[$e], $tmp_inhalt_runden);
  $tmp_inhalt_runden = ereg_replace("{resultx}", $result_x[$e], $tmp_inhalt_runden);
  $tmp_inhalt_runden = ereg_replace("{teamx}", $team_x[$e], $tmp_inhalt_runden);
  echo(stripslashes($tmp_inhalt_runden));
}
Damit dient $inhalt_runden als Vorlage für das Layout mit Platzhaltern. Bei jedem Schleifendurchlauf wird eine temporäre Variable durch die Vorlage ersetzt und geändert.

Gruß, snuu
 
Zuletzt bearbeitet:
Zurück