170 PHP i MySQL dla każdego
lewej stronie występuje typ całkowity, a po prawej stronie typ boolean. W związku z tym, ponieważ wynikiem całego porównania ma być wartość typu bool ean (true lub false), lewy argument jest konwertowany na typ boolean.
Konwersja wartości całkowitej O na typ boolean daje wartość false (por. opis konwersji typów w rozdziale 2.). Ostatecznie sprawdzany jest warunek false == false, który jest prawdziwy! Dlatego też na ekranie zostanie wyświetlona nieprawdziwa informacja. Jeśli zatem chcemy korzystać z tego typu wywołań funkcji strpos (a także wszystkich od niej pochodnych, opisanych wyżej), należy korzystać z operatorów === lub !== (czyli identyczny — nieidentyczny, por. opis operatorów w rozdziale 2.). Te operatory sprawdzają nie tylko zgodność wartości, ale również zgodność typów. Prawidłowy kod sprawdzający, czy ciąg str2 występuje w ciągu strl, będzie miał więc postać:
<?php
Jstrl = "abcdabcd":
$str2 - "ab":
if(strpos($strl. $str2) === false){ echoCCiąg $str2 nie został znaleziony w ciągu Jstrl."):
}
else{
echoCCiąg $str2 został znaleziony w ciągu $strl."):
}
Oprócz opisanych wyżej istnieją jeszcze dwie inne przydatne funkcje przeszukujące ciągi: strstr i stristr. Jak łatwo się domyślić, stristr to odmiana funkcji strstr, j która nie uwzględnia wielkości znaków. Wywołanie strstr ma taką samą postać jak strpos, czyli:
strstrOciąg przeszukiwany". "ciąg poszukiwany") inne jest jednak jej działanie. Otóż zwraca ona część przeszukiwanego ciągu zaczynają- | cą się od ciągu poszukiwanego. Przykładowe wywołanie:
$str - strstrOabcdefg". "de"):
spowoduje przypisanie zmiennej str wartości defg. W przypadku gdy drugi argument nie będzie typu string, zostanie on najpierw skonwertowany na typ int, a następnie potraktowany jako ciąg znaków. Przykładowo wywołanie:
$str - strstr("adres@domena.com", 64):
spowoduje przypisanie zmiennej str wartości lklomena.com, gdyż 64 jest kodem ASCII znaku @.
Jeśli chcemy wymienić część łańcucha znaków na inny, możemy zastosować jedną z funkcji zamieniających podciągi: str_replace, str_i replace, substr_replace lub strtr. Zobaczmy, do czego służą i jakie występują między nimi różnice. Zaczniemy