[PHP] Merkwürdiges Problem mit while-Schleife

Foickert

Well-known member
9 August 2006
59
0
Hey Leute,

ich habe ein sehr merkwürdiges Problem mit folgender while-schleife:

PHP:
$i = 0;
$input = array("markus", "peter");

while (($rand_keys = array_rand($input)) AND $i < 1) {
$ergebnis = $input[$rand_keys];
if($ergebnis == "markus") {
echo $ergebnis;
++$i;
}
}

Komischerweise wird die Variable $ergebnis nie zu "markus"!
Das muss daran liegen, dass "markus" als erster Wert im Array steht. Wenn ich nämlich noch weitere Werte in das Array schreibe, dann werden diese alle abwechselnd aufgerufen, jedoch nie der erste Wert "markus".. soviel hab ich schon herausgefunden.

Das muss damit zusammenhängen, dass $rand_keys 0 ergibt, wenn der Wert "markus" ausgewählt wurde. Aber wieso hat PHP damit ein Problem?

Danke für eure Hilfe!
markus
 
Das ganze läuft bei $rand_keys == 0 (was als false interpretiert wird) auf folgendes hinaus:
PHP:
while (false and true)
{
  // ...
}
Dadurch sollte der Fehler offensichtlicher werden oder?
 
mmhh.. das hab ich verstanden, aber wieso hat PHP ein Problem damit?
.. und wie lässt sich das lösen?
 
naja einfach in der Bdeingung nur auf $i<1 prüfen und das
<font color="#000000">$rand_keys = array_rand($input<font color="#007700">)

innerhlab der Whileschleife aufrufen.


PHP:
		 			 $i = 0; 
$input = array("markus", "peter"); 

while ($i < 1) { 
$rand_keys = array_rand($input)
$ergebnis = $input[$rand_keys]; 
if($ergebnis == "markus") { 
echo $ergebnis; 
++$i; 
} 
}
 
mmhh.. das hab ich verstanden, aber wieso hat PHP ein Problem damit?
.. und wie lässt sich das lösen?
PHP hat kein Problem damit. Das ist alles semantisch vollkommen korrekt. false and true ist laut den bool'schen Regeln nunmal immer false und somit wird die Schleife nicht ein einziges Mal durchlaufen.

Lösungsansätze wurden hier ja schon gepostet. Zieh den Aufruf in die Schleife, der hat eh nix in der Abbruchbedingung verloren.
 
Ich wusste gar nicht, dass der while-Teil auch so simpel lauten kann.
Ich dachte dort muss immer die Zeile rein, die mit jedem Mal neu durchlaufen werden soll.

Das löst wohl einige Probleme die ich bisher schon mit while-schleifen hatte :)

Besten Dank!!
 
Neee, es muß nur ne Bedingung rein, so dass das Ergebnis true oder false ist und am beten, die erst true ist und irgendwann zu false wird.

Durchlauf in der Bedingung macht sinn wenn du daten aus der DB einließt.

while("solange ich neue daten bekomme")
 
Darf man fragen warum hier sowieso eine while Schleife benutzt wird??? Wenn Du das Ding eh nur einmal willst lass die Schleife einfach weg:-?
 
Ich gehe mal davon aus, dass es nicht der ganze code ist den er hat, oder das er nur am teste ist (Spielerei).
 
Achso na dann würde ich in dem Fall eher folgendes Verwenden:
PHP:
$i = 0;
while(TRUE) {
   // code
   $i++;
   if($i == /*ZAHL*/) {
      break;
   }
}

Würde ich mal denken das der Code etwas logischer ist, muss man aber nicht meiner Meinung sein.