- Porównywanie stringów
- Wyciąganie fragmentów stringów
- Podmiana fragmentów stringów
- Podmiana znaków w stringach
- Przydatne funkcje
Porównywanie stringów
Podstawową funkcją służącą do porównywania stringów jest strcmp(). Przyjmuje ona dwa argumenty – nazwy stringów, które mają być porównane. Funkcja ta zwraca wartość 0, jeśli ciągi są takie same, wartość większą od zera jeśli pierwszy jest większy od drugiego, lub wartość mniejszą od zera jeśli pierwszy jest mniejszy od drugiego. Funkcja ta rozróżnia wielkość znaków.
Jeśli zachodzi potrzeba porównania dwóch ciągów, to należy użyć funkcji strcasecmp() (parametry i wartości zwracane tak, jak przy funkcji strcmp). Istnieje także funkcja strncmp(), która porównuje tylko taką ilość początkowych znaków z podanych ciągów, jaka została podana jako trzeci parametr tej funkcji. Oczywiście istnieje też wersja funkcji strncmp() ignorująca wielkość znaków: strncasecmp().
Racjonalnym wytłumaczeniem, dlaczego ciągi należy porównywać za pomocą funkcji strcmp() lub pochodnych, a nie zwykłego operatora porównania '==’ jest fakt, że interpreter języka PHP automatycznie konwertuje typy zmiennych tak, aby przy porównywaniu były takie same. Tak więc warunek:
<? $a = 0; $b = "0ala"; if ($a == $b) echo "Tak"; else echo "Nie"; ?>
Można teoretycznie użyć operatora „===” – porównania nie tylko wartości, ale też typu, ale tu z kolei warunek:
<? $a = 0; $b = "0"; if ($a === $b) echo "Tak"; else echo "Nie"; ?>
wyświetli „Nie”, gdyż pomimo że obie zmienne mają wartość 0, to zmienna $a jest liczbą, a zmienna $b ciągiem tekstowym.
<? $email = "prezydent@polska.pl"; $domena = strstr($email, "@"); echo $domena; ?>
wyświetli „@polska.pl”. Jeśli ciąg nie jest znaleziony, to zwracana jest wartość FALSE, dzięki czemu funkcji tej można używać w instrukcjach warunkowych, np.:
<? $email = "prezydent@polska.pl"; if (strstr($email, "polska") !== false) echo "Email zawiera słowo 'polska'"; ?>
Wyciąganie fragmentów stringów
Bardzo często zachodzi potrzeba wyciągnięcia ze zmiennej tekstowej tylko pewnego jej fragmentu. Najłatwiej jest, jeśli znasz długość wyciąganego fragmentu i pozycja, w której się znajduje w zmiennej. Np. jeśli ze zmiennej zawierającej „1992/11/19” chcesz wyciągnąć rok. Wiadomo, że rok jest na samym początku i ma 4 znaki. Najłatwiej jest użyć funkcji substr().
Jako pierwszy paramter pobiera ona string, z którego będzie wycinany fragment, jako drugi – miejsce, z którego rozpocznie się wycinanie (0 jeśli od pierwszego znaku, liczba ujemna jeśli ma to być ilość znaków od końca), a ostatni, opcjonalny parametr wskazuje ilość znaków do wycięcia (jeśli zostanie pominięty, to zwrócony zostanie podciąg od wskazanego znaku początkowego do końca ciągu).
Zatem, w tym przypadku wywołanie funkcji substr() będzie wyglądało tak:
<? $data = "1992/11/19"; $rok = substr($data, 0, 4); echo $rok; ?>
<? $data = "1992/11/19"; $tablica = explode("/", $data); echo "rok: $tablica[0], miesiąc: $tablica[1], dzień: $tablica[2]"; ?>
<? $tekst = "19/11/1982 01:43:12"; $dataiczas = explode(" ", $tekst); $data = explode("/", $dataiczas[0]); $czas = explode(":", $dataiczas[1]); echo "dzień: $data[0], miesiąc: $data[1], rok: $data[2] "; echo "godzina: $czas[0], minuta: $czas[1], sekunda: $czas[2]"; ?>
Może także zajść potrzeba wyciągnięcia fragmentu stringa do wystąpienia określonego znaku, np. pierwszego zdania w tekście.
<? $tekst = 'To jest tekst. Tego zdania nie będzie widać.'; $zdanie = substr($tekst, 0, strpos($tekst, '.')); echo $zdanie; ?>
Na ekranie powinno wyświetlić się zdanie „To jest tekst” – bez kropki na końcu.
Podmiana fragmentów stringów
Do podmiany całych fragmentów ciągu służy funkcja str_replace(), która przyjmuje trzy argumenty: ciąg, który ma być podmieniony; ciąg, który ma go zastąpić i string, którego fragmenty będą podmieniane. Innymi słowy, wszystkie wystąpienia pierwszego ciągu w trzecim ciągu są zamieniane na drugi ciąg. UWAGA: zmienna podawana jako trzeci argument nie jest zmieniana. Poprawiony string jest zwracany przez funkcję. Przykład:
<? $tekst = "Jeśli jesteś za, podnieś rękę"; $wynik = str_replace("za", "przeciw", $tekst); echo $wynik; ?>
Na ekranie powinien wyświetlić się tekst „Jeśli jesteś przeciw, podnieś rękę”.
Począwszy od wersji PHP 4.0.5, każdy z parametrów funkcji str_replace() może być tablicą. Jeśli zatem trzeci parametr jest tablicą, to operacja podmiany tekstów jest wykonywana na każdym elemencie tablicy, a zwracana zmienna także jest tablicą.
Natomiast jeśli tablicami są pierwszy i drugi parametr, to każdy element z pierwszej tablicy jest podmieniany na odpowiadający mu element drugiej tablicy. Jeśli pierwsza tablica ma więcej elementów niż druga, to te elementy z pierwszej tablicy, które nie mają odpowiednika w drugiej, zamieniane są na puste ciągi. Pozwala to na wiele podmian za jednym wywołaniem funkcji str_replace(), co ma również wpływ na wydajność skryptów.
Podmiana znaków w stringach
W PHP można znaleźć także funkcję, która zamieni wszystkie wystąpienia podanych znaków na inne znaki. Dzięki temu można np. usunąć wszystkie polskie znaki diakrytyczne albo skonwertować je na inną stronę kodową.
Odpowiednia funkcja nazywa się się strtr() i przyjmuje trzy argumenty: string, w którym będą podmieniane znaki; ciąg zawierający znaki do podmiany i ciąg znaków podmieniających. W poniższym przykładzie polskie znaki diakrytyczne zostaną zamieniane na odpowiadające im litery alfabetu łacińskiego:
<? $tekst = "Zażółć gęślą jaźń"; $wynik = strtr($tekst, 'ążśźęćńół', 'azszecnol'); echo $wynik; ?>
Przydatne funkcje
Przedstawimy teraz kilka przydatnych funkcji operujących na stringach:
- strlen($string) – zwraca ilość znaków w stringu,
- nl2br($string) – do zamiany znaków końca wiersza na HTMLowe znaczniki (bardzo przydatne przy wyświetlaniu sformatowanego tekstu w oknie przeglądarki),
-
strip_tags($string) – usuwa wszystkie znaczniki HTML z podanego jako argument ciągu. Możliwe jest podanie opcjonalnego drugiego parametru – ciągu, zawierającego nazwy znaczników HTML, które mają pozostać,
-
chop($string), trim($string), ltrim($string), rtrim($string) – usuwa białe znaki (spacja, tabulator, znacznik nowego wiersza) z początku lub końca ciągu. Funkcja chop(), tak jak i rtrim(), usuwa te znaki z końca ciągu, ltrim() z początku, a trim() z początku i końca.
Hosting stworzony dla WordPressa
Masz stronę WWW na WordPressie? My też uwielbiamy ten system dla stron internetowych. Dlatego stworzyliśmy hosting specjalnie dla jego użytkowników.