IF Abfrage
lvl
- php
Hi all.
Hab mir eine IF Abfrage gebaut, die mir ein "falsches" Ergebnis liefert.
echo (1.1 <= 1.3) ? "green" : (1.1 <= 2) ? "yellow" : "red";
Anstatt "green" zurück zu liefern, erhalte ich "yellow".
Die "umständliche" Schreibweise,
if(1.1 <= 1.3){ echo "green"; }
elseif(1.1 <= 2) { echo "yellow"; }
else { echo "red"; }
liefert das gewünschte Ergebnis "green" wieder.
Hi Ivl,
Anstatt "green" zurück zu liefern, erhalte ich "yellow".
if(1.1 <= 1.3)
{
echo "green";
}
1.2 _ist_ kleinergleich 1.3, somit würde "green" ausgegeben werden.
elseif(1.1 <= 2)
{
echo "yellow";
}
Jetzt sagst Du aber: Wenn aber 1.2 kleiner gleich 1.3 ist (und das ist ja der Fall), _dann_ liefere "yellow" aus. Und genau das passiert.
else
{
echo "red";
}
Nachdem die 2. Möglichkeit eingetroffen ist, wird die else-Bedingung nicht mehr benötigt. Sichere also ab, dass bei einer 2. Bedingung die erste ausgeschlossen ist.
Die "umständliche" Schreibweise
Wieso Du das "umständlich" findest, verstehe ich nicht. Genau solche Logikfehler wie den den Deinen erkennt man bei der "umständlichen" Version schneller.
Mit lieben Grüßen aus Wien
Michi
if(1.1 <= 1.3){ echo "green"; }
elseif(1.1 <= 2) { echo "yellow"; }
else { echo "red"; }
liefert aber green wieder und nicht yellow
Hi Ivl,
entschuldige bitte, ich wollte es natürlich genau andersrum sagen. Man soll halt keine Fragen beantworten und zeitgleich essen und telefonieren.
Bei Dir trifft die erste Bedingung ein, somit passiert das, was Du als reaktion darauf möchtest, nämlich die Ausgabe von "green".
"yellow" würde erst _dann_ ausgegegebn werden, wenn die erste Bedingung _nicht_ stimmt.
<?php
if(9 <= 1.3)
{
echo "green";
}
elseif(1.1 <= 2)
{
echo "yellow";
}
else
{
echo "red";
}
?>
gibt zB. "yellow" aus.
Michi
Hallo
echo (1.1 <= 1.3) ? "green" : (1.1 <= 2) ? "yellow" : "red";
Hier wird zuerst der ganze Code durchlaufen und dann erst das gefundene Element ausgegeben.(hier das zuletzt gefundene)
if(1.1 <= 1.3){ echo "green"; }
elseif(1.1 <= 2) { echo "yellow"; }
else { echo "red"; }
Hier wird nach dem ersten richtigen Ergebnis abgebrochen und ausgegeben.
Gruß Umpa
echo $begrüßung;
Hab mir eine IF Abfrage gebaut, die mir ein "falsches" Ergebnis liefert.
echo (1.1 <= 1.3) ? "green" : (1.1 <= 2) ? "yellow" : "red";
Mit einem Klammernpaar wird PHPs Verhalten deutlicher:
echo ( (1.1 <= 1.3) ? "green" : (1.1 <= 2) ) ? "yellow" : "red";
Das Ergebnis des ersten Klammernausdrucks ist "green". "green" entspricht wahr, also ist die Bedingung des zweiten ?: erfüllt und "yellow" wird ausgegeben.
Du möchtest hingegen dieses Verhalten:
echo 1.1 <= 1.3 ? "green" : (1.1 <= 2 ? "yellow" : "red");
Die Klammern um die Bedingung kannst du weglassen, Vergleiche binden stärker als der ternäre Operator.
echo "$verabschiedung $name";
Mit einem Klammernpaar wird PHPs Verhalten deutlicher:
echo ( (1.1 <= 1.3) ? "green" : (1.1 <= 2) ) ? "yellow" : "red";
Das Ergebnis des ersten Klammernausdrucks ist "green". "green" entspricht wahr, also ist die Bedingung des zweiten ?: erfüllt und "yellow" wird ausgegeben.
Vielen Dank, diese Erklärung hat mir meine Hand mit einem "Ach JA" ein bissel näher gebracht. :D
Jetzt ist die Logik klar.