2017-01-10 4 views
-1

Ich brauche spezielle Vorlagen in Strings. Einer dieser Saiten ist:Warum "in der Zeichenkette gefunden" funktioniert nicht korrekt in PHP?

@if($fabric->id == $product->fabric_id)<br />\r 

Wenn ich versuche, @if in String mit PHP-Funktion strpos zu überprüfen, ist es mir false gibt. Link zu Sandbox: http://sandbox.onlinephpfunctions.com/code/f54c3a1c0124086833deccf4fbcb5e07b656fa93

Aber es funktioniert korrekt, wenn die Zeichenfolge ein Leerzeichen vor '@if' hat. Warum? http://sandbox.onlinephpfunctions.com/code/55b2046ba7f4e1fdc88cf5fd4113e681b7dd4a75

Antwort

4

strpos() gibt einen Index der gesuchten Zeichenfolge zurück. Im ersten Fall ist es 0 (Null), da @if ganz am Anfang steht. Wenn ein Leerzeichen davor ist, ist die Position 1 (Eins). Was Sie verwirrt, ist, dass 0 (0) als false von PHP in bedingten Anweisungen interpretiert wird, während 1 (eins) als true interpretiert wird.

Wenn Sie sicherstellen mögen, dass die Zeichenfolge haupt nicht gefunden wurde, nicht einmal bei Null-Position, müssen Sie strenge Vergleichsoperator verwenden:

if (strpos($str, '@if') === false) { echo 'Not found'; } 
+0

Wie gesagt in [strpos Dokumentation] (http://php.net/manual/en/function.strpos.php), sollten Sie den Operator '===' verwenden, um zu überprüfen, ob strpos wirklich falsch zurückgegeben wird oder nicht. – AnthonyB

+0

OMG warum bin ich so dumm. Vielen Dank! – Deromanenko

Verwandte Themen