12. diel - Vyhľadávania textových reťazcov v PHP
V minulej lekcii, Porovnávanie textových reťazcov v PHP II. časť , sme si ukázali ďalšie funkcie pre porovnávanie textových reťazcov.
V tejto lekcii funkcií v PHP si vysvetlíme užitočné funkcie pre vyhľadávanie textových reťazcov a ich častí.
strspn()
Je funkcia, ktorá vráti počet hľadaných znakov v reťazci. Pokiaľ sa
ale v reťazci nachádza pred hľadanými znakmi znak, ktorý medzi ne nepatrí,
vráti funkcia hodnotu 0
. Funkcia prijíma 4 parametre, kde prvým
z nich je náš textový reťazec. Druhým parametrom je hľadaný znak alebo
skupina znakov. Tretím parametrom je pozícia, odkiaľ má funkcie v textovom
reťazci začať vyhľadávať (nepovinný). Posledným parametrom je dĺžka
reťazca (v aké veľké časti reťazca budú znaky hľadané) (nepovinný).
Funkcia je binary-safe. Ukážme si príklady:
$strspn = strspn("Znaky se nacházejí v této větě.",'Zzykan'); print_r($strspn);
Výstupom na stránku bude počet znakov, ktoré sa zhodujú v hľadané
maske 'Zzykan'
, avšak len do prvého znaku, ktorý sa v maske
nenachádza, v tomto prípade je to medzera. Dostaneme teda hodnotu
5
.
$strspn = strspn("Hledané znaky se nacházejí v této větě.",'Zzykan'); print_r($strspn);
V tomto prípade funkcie vráti hodnotu 0
, keďže sa pred
maskou hľadaných znakov nachádza znaky, ktoré sa v nej nevyskytujú.
Sčítanie znakov teda pokračuje do prvej nezhody, čo je písmeno
H
, ktoré nebude započítané.
$strspn = strspn("Tyto znaky se nacházejí v této větě.",'Zzykan', 5); print_r($strspn);
Pridaním tretieho parametra začneme znaky vyhľadávať až od 5.
znaku. Reťazec "Tyto "
spoločne s medzerou bude
preskočený a zhody či nezhody znakov v maske nebudú overené. Funkcia teda
začne overovať až od textového reťazca "znaky"
kde pri prvej
nezhode znaku reťazca s maskou bude počítanie ukončené. Na výstup
dostaneme hodnotu 5
.
$strspn = strspn("Tyto znaky se nacházejí v této větě.",'Zzykan', 5, 3); print_r($strspn);
Rovnako ako v predchádzajúcom príklade, vyhľadávanie a počítanie
znakov je posunuté o 5
znakov, avšak sme tiež definovali 4.
parameter, ktorý nám limituje dĺžku zvyšku reťazca, v
tomto prípade na 3
znaky, teda iba porovnávame reťazec
"zna"
. Keďže sa všetky tieto znaky nachádzajú v maske
hľadaných znakov, bude na výstup vrátená hodnota 3
.
strcspn()
Je funkcia, ktorá vráti počet znakov (teda i medzier) nájdených za prvým hľadaným znakom. Funkcia prijíma 4 parametre, kde prvým z nich je náš textový reťazec. Druhým parametrom je hľadaný znak alebo skupina znakov (voliteľné parametre. Tretím parametrom je pozícia, odkiaľ má funkcie v textovom reťazci začať vyhľadávať (nepovinný). Posledným parametrom je dĺžka reťazca (v aké veľké časti reťazca budú znaky hľadané), parameter je taktiež voliteľný. funkcia je binary-safe, avšak diakritiku zase počíta ako dva znaky. Ukážme si príklady:
$strcspn = strcspn("Hello world!",'w'); print_r($strcspn);
V tomto textovom reťazci bude vyhľadaný prvý znak 'w'
a na
výstup dostaneme počet znakov za hľadaným znakom. V tomto prípade je to
číslo 6
.
Ak chceme určiť odkiaľ bude funkcia vyhľadávať, pridáme druhý parameter:
$strcspn = strcspn("Hello world!",'w', 1); print_r($strcspn);
Tu vyhľadávanie začne až od druhej pozície, teda znakom
'e'
. Na výstup dostaneme číslo 5
.
Ak chceme obmedziť veľkosť vyhľadávania v textovom reťazci, využijeme tretí parameter:
$strcspn = strcspn("Hello world!",'w', 0, 4); print_r($strcspn);
V tomto prípade rovnako ako u predchádzajúceho príkladu hľadáme znak
'w'
od začiatku reťazca (od pozície 0
), ale až do
pozície 4
, textový reťazec teda nie je prehľadávaný celý,
ale iba jeho časť "Hell"
. Môžeme si všimnúť, že v tejto
časti reťazca sa hľadaný znak nenachádza, funkcia teda vráti dĺžku
časti reťazca, teda 4
.
strstr()
Je funkcia, ktorá nájde vyhľadávaný reťazec a vráti hľadaný reťazec
so zvyškom textového reťazca. Funkcia prijíma celkom 3 parametre, kde prvým
z nich je textový reťazec, druhým parametrom je vyhľadávaný reťazec a
tretím boolean hodnota (true
alebo false
), ktorá
nastavuje, či bude vrátený zvyšok textového reťazca od začiatku k zhode
vyhľadaného reťazca (true
), alebo od zhody vyhľadaného
reťazca ku koncu (false
). Funkcia je
case-sensitive, teda záleží na veľkosti písmen. Pre lepšie
pochopenie si túto problematiku ukážme na príkladoch:
$strstr = "Jirka přijede později."; print_r(strstr($strstr, "přijede"));
V textovom reťazci "Jirka přijede později."
bude vyhľadaný
reťazec "přijede"
a vráti hľadaný reťazec so zvyškom
celkového reťazca. Keďže sme nenastavili tretí parameter, je jeho
defaultná hodnota false
. Výstupom na stránku teda bude
"přijede později."
.
$strstr = "Jirka přijede později."; print_r(strstr($strstr, "přijede", true));
Príklad vyššie je rovnaký ako v príklade vyššie, len sme uviedli
tretí parameter. Ten zabezpečí, že nám na výstup vráti reťazec od
začiatku textového reťazca do hľadaného reťazca. Hľadaný reťazec ale
už nebude tvoriť súčasť výstupu na stránku. Výstupom na
stránku teda bude "Jirka"
.
Pokiaľ zadáme prázdny hľadaný reťazec, dostaneme
výnimku "Empty needle"
.
stristr()
Táto funkcia je má totožné vlastnosti, ako funkcia strstr()
.
Jedinou výnimkou je však vlastnosť case-insensitive, teda
nezáleží na veľkosti písmen. Je to teda funkcie, ktorá nájde
vyhľadávaný reťazec a vráti hľadaný reťazec so zvyškom textového
reťazca. Prijíma celkom 3 parametre, kde prvým z nich je textový reťazec,
druhým parametrom je vyhľadávaný reťazec a tretím boolean hodnota
(true
alebo false
). Ten nastavuje, či bude vrátený
zvyšok textového reťazca od začiatku k zhode vyhľadaného reťazca
(true
) alebo od zhody vyhľadaného reťazca ku koncu
(false
). Ukážme si príklad, v ktorom je táto funkcia oproti
strstr()
rozdielna:
$stristr = "Jirka přijede později."; print_r(stristr($stristr, "PřijedE"));
Výstup bude rovnaký ako pri funkcii strstr()
, ale hľadaný
reťazec bude vyhľadaný aj hoci obsahuje rozdielnu veľkosť znakov.
Pokiaľ zadáme prázdny hľadaný reťazec (2. parameter),
dostaneme taktiež výnimku "Empty needle"
.
strchr()
Táto funkcia je aliasom funkcia strstr()
, teda má totožné
vlastnosti. Nájde vyhľadávaný reťazec a vráti hľadaný reťazec so
zvyškom textového reťazca. Funkcia prijíma celkom 3 parametre, kde prvým z
nich je textový reťazec, druhým parametrom je vyhľadávaný reťazec a
tretím boolean hodnota (true
alebo false
). Tá
nastavuje, či bude vrátený zvyšok textového reťazca od začiatku k zhode
vyhľadaného reťazca (true
), alebo od zhody vyhľadaného
reťazca ku koncu (false
). Funkcia je
case-sensitive, teda záleží na veľkosti písmen. Ukážme si
príklad:
$strchr = "Jirka přijede později."; print_r(strchr ($strchr , "později"));
Rovnako ako pri funkcii strstr()
. Bude sa vyhľadá hľadaný
reťazec v našom zadanom textovom reťazci a vráti zvyšok textového reťazca
spoločne s hľadaným reťazcom. Výstupom teda je
"později."
.
strrchr()
Je funkcia, ktorá nájde posledný zhodu vyhľadávaného znaku v našom textovom reťazci a vráti zvyšok textového reťazca. Funkcia prijíma celkom 2 parametre, kde prvým z nich je textový reťazec, druhým parametrom je vyhľadávaný znak. Druhý parameter môže síce obsahovať viac znakov (slovo), ale do úvahy sa bude brať iba prvý znak. Funkcia je case-sensitive. Ukážme si príklad:
$strrchr = "Aleš došel nakoupit potraviny, Karel došel koupit dárky."; print_r(strrchr($strrchr, "došel"));
Funkcia strrchr()
nájde znak "d"
(pretože sa
berie do úvahy iba prvý znak v 2. parametra) v slove "dárky"
v
druhej vete, pretože ide o posledný zhodu. Funkcia vráti zvyšok textového
reťazca vrátane znaku zhody. Výstupom je teda textový
reťazec "dárky."
.
Dobrým príkladom pre túto funkciu je napríklad k získaniu názvu súboru z cesty:
$strrchr = "/var/www/html/index.php"; print_r(strrchr($strrchr, "/"));
Na výstupe funkcia bude /index.php
.
Pokiaľ zadáme prázdny hľadaný reťazec, tak oproti
predchádzajúcim funkciám na stránke neuvidíme žiadnu chybovú hlášku ani
hodnotu. Skutočnosťou je, že funkcia vráti boolean s hodnotou
false
.
V ďalšej lekcii, Vyhľadávania textových reťazcov v PHP II. časť , si ukážeme ďalšie funkcie pre vyhľadávanie textových reťazcov.