Foreach Schleife Probleme in PHP

7

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.

    
y3di 26.08.2011, 13:18
quelle

7 Antworten

12

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.

    
Crack 26.08.2011, 13:22
quelle
6

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

    
salathe 26.08.2011 13:22
quelle
2

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

konvertiert

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

angibt

Schauen Sie sich Ссылка für weitere Details an.

    
Quamis 26.08.2011 13:23
quelle
0

Das funktioniert gut:

%Vor%

Ausgabe:

%Vor%

Beachten Sie die === .

    
Prisoner 26.08.2011 13:23
quelle
0

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     
Maxim Krizhanovsky 26.08.2011 13:23
quelle
0

Das ist wahrscheinlich 'van' == 0 (true).

Stattdessen sollten Sie 'van' === 0 (false) verwenden.

Kurz gesagt, benutze === statt ==.

    
Madara Uchiha 26.08.2011 13:24
quelle
0

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 ==

verwenden     
ClickerMonkey 26.08.2011 13:24
quelle

Tags und Links