Wyciąganie fragmentów ciągów
Bardzo często zachodzi potrzeba wyciągnięcia ze zmiennej tekstowej
tylko pewnego jej fragmentu. Najłatwiej jest jeśli znana jest
długość wyciąganego fragmentu i pozycja w której się znajduje w
zmiennej. Np. jeśli ze zmiennej zawieracjącej "1992/11/19" chcemy
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 ciąg z którego będzie wycinany
fragment, jako drugi miejsce, z którego będzie rozpoczęte 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 pominie się ten parametr, to zwrócony
zostanie pod-ciąg od wskazanego znaku początkowego do końca ciągu).
Przykład 9.7. Użycie funkcji substr()
<?php $data = "1992/11/19"; $rok = substr($data, 0, 4); ?>
|
Ale to oczywiście najprostsza z sytuacji. Bardziej skomplikowanym
przykładem będzie wyciągnięcie z tej samej daty wszystkich pól.
Można oczywiście 3 razy używać funkcję substr, ale wydajniejszą
metodą jest rozbicie tekstu na tablicę korzystając z opisanej przy
okazji tablic funkcji explode.
Przykład 9.8. Zastosowanie funkcji explode
<?php $data = "1992/11/19"; $tablica = explode("/", $data); ?>
|
W powyższym przykładzie, w pierwszym elemencie tablicy znajdować
się będzie rok, w drugim a w trzecim dzień z podanej daty. Można
także użyć tej funkcji w bardziej skomplikowany sposób - do
rozbicia ciągu zawierającego datę i czas.
Przykład 9.9. Rozszerzony przykład użycia funkcji explode
<?php $tekst = "19/11/1982 01:43:12"; $dataiczas = explode(" ", $tekst); $data = explode("/", $dataiczas[0]); $czas = explode(":", $dataiczas[1]); ?>
|
Teraz tablica $data zawiera dzień, miesiąc i rok a tablica $czas
godzinę, minutę i sekundę. Ale co jeśli godzina zawiera setne
części sekundy, które podawane są po kropce? Robić jeszcze jedno
rozbicie? To już za dużo. Lepiej jest użyć funkcji
split(), która funcjonuje w podobny sposób co
explode, ale rozbija tekst nie za pomocą zwykłych ciągów znaków,
ale za pomocą wyrażeń regularnych. Tak więc cały string zawierający
datę i czas (z setnymi sekundami włącznie) można rozbić za pomocą
jednego wywołania funkcji split().
Przykład 9.10. Zastosowanie funkcji split()
<?php $tekst = "19/11/1982 01:43:12.10"; $tablica = split("[ /:.]", $tekst); ?>
|
Teraz w tablicy $tablica znajować się będą po
kolei: dzień, miesiąc, rok, godzina, minuta, sekunda i setna część
sekundy.
Może też zajść potrzeba wyciągnięcia fragmentu ciągu do jakiegoś znaku, np. pierwszego zdania z jakiegoś
tekstu. Wtedy można użyć połączenia funkcji substr() i strpos(), która zwraca numer znaku gdzie
znajduje się pierwsze wystąpienie ciągu podanego jako drugi parametr w ciągu podanym jako pierwszy
parametr, lub false jeśli pierwszy ciąg nie zawiera w sobie drugiego. A więc pierwsze zdanie podanego
ciągu można uzyskać tak:
Przykład 9.11. Zastosowanie funkcji strpos()
<?php $tekst = "To jest tekst. Tego zdania nie będzie widać."; $zdanie = substr($tekst, 0, strpos($tekst, ".")); ?>
|
Zmienna $zdanie powinna zawierać "To jest tekst"
- bez kropki na końcu.