[php] strpos zwraca błędne wyniki


(WooQash) #1

Witam. Powoli kończą mi się siły na zabawę z tą funkcją ale niestety nie znam zamiennika strpos();

Problem jest następujący, mam coś takiego

$txt = "x2x";

echo strpos($txt, "x2x");

Dla mnie jest to logiczne mocno, ale niestety funkcja zwraca 0, czyli fałsz, co jest nie prawdą.

Nie wiem co robię źle, ale zaczyna mi to grać na nerwach dość mocno.


(ziggurad) #2

Spróbuj:

$txt = "12312x2x";

var_dump(strpos($txt, "x2x"));

Funkcja zwraca indeks od którego zaczyna się szukany ciąg. U Ciebie zwracało 0 bo od pierwszego znaku zaczynał się szukany ciąg.


(adpawl) #3

#-o

…a od czego jest manual?

http://www.php.net/manual/en/function.strpos.php


(WooQash) #4

Moja głupota mnie czasami przeraża. Dzięki za naprowadzenie mojego umysłu na dobry tor :stuck_out_tongue:


(Reventon134) #5

No, ze strpos()- em to ostrożnie! Bo faktycznie, jeśli ciąg znajduje się na samym początku to ci zwraca 0. I tu wskazówka: jeśli używasz strposa w instrukcji if, należy zawsze używać operatora ‘===’ , czyli “identyczne”, bądź ‘!===’, czyli “nieidentyczne”. Gdy będziesz szukał jednego ciągu znaków w drugim i będzie on występował na początku, to zostanie zwrócony wynik 0. Operator ‘==’ porówna zero do wartości false, ale z racji tego, iż zero jest wartością numeryczną, a false to typ boolean, zamieni (przekonwertuje) zero na typ boolean, co da nam w wyniku fałsz, z kolei warunek false==false jest prawdziwy; funkcja zareaguje tak, jakby ciągu znaków nie było na początku drugiego ciągu, chociaż w rzeczywistości tak jest. Natomiast operator ‘===’ zauważy różnicę w typach zmiennych i wynik będzie prawidłowy.

Uf.