54012 skanuj0158 (11)

54012 skanuj0158 (11)



Rozdział 6. ♦ Ciągi znaków, data i czas 169

Przeszukiwanie ciągów

Podczas tworzenia skryptów PHP często występuje konieczność przeszukiwania ciągów znaków. W realizacji tego zadania jest pomocnych kilka funkcji, są to: strpos, strrpos, stripos, strripos, strstr, stristr. Funkcja strpos zwraca numer pierwszej pozycji poszukiwanego ciągu. Jej wywołanie ma postać: strpos("ciąg przeszukiwany". "ciąg poszukiwany*) przy czym przeszukiwanie rozpoczyna się od początku ciągu, a pozycje ciągu przeszukiwanego numerowane są od zera (czyli pierwsza litera znajduje się na zerowej pozycji). Przykładowe wywołanie:

$pos = strposCabcdefg", "cde"):

spowoduje przypisanie zmiennej pos wartości 2. Odmianą funkcji strpos jest stripos Działa ona prawie identycznie jak strpos, lecz nie rozróżnia wielkości liter. Jeśli natomiast chcemy przeszukiwać ciągi od końca, czyli uzyskać pozycję ostatniego wystąpienia poszukiwanego ciągu, należy skorzystać z funkcji strrpos lub strripos. Przykładowe wywołanie:

$pos = strrposOabcdabcd". "ab"):

spowoduje przypisanie zmiennej pos wartości 4. Funkcja strripos działa tak samo jak strrpos, nie rozróżnia jedynie wielkości liter w ciągu.

Jeżeli w ciągu przeszukiwanym nie ma ciągu poszukiwanego, każda z wymienionych funkcji zwraca wartość false typu boolean. Na tę kwestię należy zwrócić szczególną uwagę, aby nie doprowadzić do powstania błędów w skrypcie wykorzystującym te funkcje. Przeanalizujmy poniższy fragment kodu:

<?php

$strl = "abcdabcd":

Jstr2 = "ab":

if(strpos($strl. $str2) = false){ echo("Ciąg $str2 nie został znaleziony w ciągu Jstrl.’):

}

else{

echoCCiąg $str2 został znaleziony w ciągu Jstrl.");

}

Chcemy sprawdzić, czy ciąg zapisany w zmiennej str2 znajduje się w ciągu strl. Wykorzystujemy zatem instrukcję warunkową i f i fakt, że funkcja strpos w przypadku nieznalezienia poszukiwanego ciągu zwraca wartość false. Jeśli jednak uruchomimy powyższy kod, będziemy zaskoczeni. Wyświetlony zostanie napis stwierdzający, że ciągu ab nie ma w ciągu abcdabcd — co jest oczywistą nieprawdą. Dlaczego tak się dzieje?

Odpowiedź kryje się w odpowiedzi na inne pytanie: jaką wartość zwraca wywołanie funkcji strpos z argumentami strl i str2? Skoro ciąg przeszukiwany strl zawiera łańcuch "abcdabcd", natomiast ciąg szukany str2 zawiera łańcuch "ab", wywołanie strpos (Jstrl. $str2) musi zwrócić wartość 0, ciąg ab występuje bowiem na samym początku ciągu abcdabcd. Co się zatem dzieje w instrukcji warunkowej if? Sprawdzany jest warunek 0 == false. Bezpośrednie porównanie jest niemożliwe, gdyż po


Wyszukiwarka

Podobne podstrony:
75292 skanuj0148 (11) Rozdział 6. ♦ Ciągi znaków, data i czas 159 gdy operator . — łączenie łańcuchó
11144 skanuj0166 (11) Rozdział 6. ♦ Ciągi znaków, data i czas 177 Listing 6.14, Przykładowe wywołani
88107 skanuj0154 (11) Rozdział 6. ♦ Ciągi znaków, data i czas 165 np.: pr1ntf( T_-3d”. 15): Bardzo u
27526 skanuj0168 (11) Rozdział 6. ♦ Ciągi znaków, data i czas 179 Listing 6.16. Ilustracja różnic mi
skanuj0156 (10) Rozdział 6. ♦ Ciągi znaków, data i czas 167 Rysunek 6.7. Efekt działania
skanuj0172 (10) Rozdział 6. ♦ Ciągi znaków, data i czas 183Funkcja strtotime Funkcja strtotime dokon
50198 skanuj0162 (10) Rozdział 6. ♦ Ciągi znaków, data i czas 173 Ostatnią z omawianych w tej sekcji
35406 skanuj0170 (13) Rozdział 6. ♦ Ciągi znaków, data i czas 181Funkcja strftime Funkcja strftime z

więcej podobnych podstron