Hier ist ein Code, den ich habe: (p nur Echos plus fügt eine neue Zeile hinzu)
%Vor%und ich bekomme diese Ausgabe:
%Vor%Warum gibt die if-Anweisung true zurück, wenn der Schlüssel 0 ist? Diese foreach-Schleife behandelt die Logik, die gilt, wenn der Schlüssel == 0 ist (und jeder andere Schlüssel, außer wenn der Schlüssel 'van' ist) und dies bringt die Logik durcheinander, weil sie wahr ist, wenn der Schlüssel 0 ist.
Irgendwelche Hilfe?
Danke.
Verwenden Sie ===
für diesen Vergleich. Wenn PHP String und Integer vergleicht, wandelt es String zuerst in Integer-Wert um und führt dann einen Vergleich durch.
Siehe Vergleichsoperatoren im Handbuch.
In PHP 'van' == 0
ist true
. Dies liegt daran, dass bei der Verwendung von ==
zum Vergleichen einer Zeichenfolge und einer Zahl die Zeichenfolge in eine Zahl konvertiert wird (wie im zweiten Link unten beschrieben). Dadurch wird der Vergleich intern 0 == 0
, was natürlich true
ist.
Die vorgeschlagene Alternative für Ihre Bedürfnisse wäre, einen strikten Gleichheitsvergleich mit ===
zu verwenden.
Siehe Vergleichsoperatoren und String-Konvertierung in Zahlen
Wenn Sie in PHP zwei Typen vergleichen, müssen Sie sie in denselben Typ konvertieren. In Ihrem Fall vergleichen Sie string
mit int
.
Intern wird dies in
if((int)'van'==0)....
und dann
if((int)'van'==1)....
(int) 'jede mögliche Zeichenkette' ist 0
:) Also müssen Sie entweder die beiden Werte manuell in den gleichen Typ umwandeln, oder ===
als Vergleichsoperator anstelle der losen =
verwenden .
Eine Ausnahme von dieser Regel (wie in den Kommentaren angegeben) wäre, wenn die Zeichenfolge mit einer Zahl beginnt oder in irgendeiner Weise als Zahl interpretiert werden kann (1, 0002, -1 usw.). In diesem Fall würde die Zeichenfolge als eine Zahl interpretiert, die das Ende des nicht-numerischen Ende der Zeichenfolge
Schauen Sie sich Ссылка für weitere Details an.
Lesen Sie die Tabelle Vergleich mit verschiedenen Typen Wenn einer der Operanden eine Zahl ist, wird der andere Operand ebenfalls in eine Zahl umgewandelt. Da 'van' nicht numerischer Stich ist, wird es in 0 umgewandelt. Sie sollten den Operator== in dem Fall verwenden, der auch den Variablentyp
überprüft Das ist wahrscheinlich 'van' == 0
(true).
Stattdessen sollten Sie 'van' === 0
(false) verwenden.
Kurz gesagt, benutze === statt ==.
Es interpretiert den 'van'
als einen booleschen Wert ( false
), dessen 0 gleich ist.
Um nach genauen Übereinstimmungen in Typ und Wert in PHP zu suchen, müssen Sie ===
anstelle von ==