Lekce 13 - Vyhledávání textových řetězců v PHP II. část
V minulé lekci, Vyhledávání textových řetězců v PHP, jsme si ukázali funkce pro vyhledávání textových řetězců.
V tomto díle vyhledávání textových řetězců a jejich částí si ukážeme další užitečné funkce, které nám usnadní naši práci s textovými řetězci.
strpos()
Funkce strpos()
nám v textovém řetězci nalezne první
hledaný řetězec a vypíše, na jaké pozici textového řetězce se nachází
první znak hledaného řetězce. Funkce přijímá celkem 3 parametry, kde
prvním z nich je náš textový řetězec, druhým parametrem je hledaný
řetězec a posledním parametrem je začátek, od kterého znaku v textovém
řetězci se bude hledaný řetězec vyhledávat. Pokud zadáme zápornou
hodnotu začátku, bude začátek počítán od konce textového řetězce.
Funkce je case-sensitive, tedy záleží na velikosti písmen.
Diakritika (např. š
) je zde počítána jako dva
znaky. Ukažme si pár příkladů použití:
$strpos = "Venku mrzne a padá sníh"; print_r(strpos($strpos, "mrzne"));
V našem textovém řetězci hledáme řetězec mrzne
. Na
výstup dostaneme číslo 6
, což je vlastně pozice v textovém
řetězci prvního znaku v hledaném řetězci, tedy znaku m
.
Další příklad:
$strpos = "Jdeme dneska bobovat?"; print_r(strpos($strpos, "dneska", 13));
V tomto případě náš hledaný řetězec v našem textovém řetězci
nalezneme na pozici 6
, avšak podle třetího parametru nám
vyhledávání začíná až od třináctého znaku, bude tedy
prohledávána useknutá část textového řetězce bobovat?"
.
Vidíme, že náš hledaný řetězec se zde nenachází. Výsledkem bude
false
.
Funkce strpos()
není multibyte
safe a v některých případech (diakritika řetězce) funkce nebude
vypisovat správné hodnoty! Využijeme tedy multibyte safe
variantu funkce s názvem mb_strpos()
a nemusíme mít obavy s
použitím diakritiky.
strrpos()
Funkce strrpos()
se od předchozí funkce strpos()
liší pouze v tom, že vyhledává poslední hledaný řetězec nacházející
se v textovém řetězci a vrátí pozici prvního znaku hledaného řetězce.
Funkce přijímá celkem 3 parametry, kde prvním z nich je náš textový
řetězec, druhým parametrem je hledaný řetězec a posledním parametrem je
začátek, od kterého znaku v textovém řetězci se bude hledaný řetězec
vyhledávat. Pokud zadáme zápornou hodnotu začátku, bude začátek
počítán od konce textového řetězce. Funkce je
case-sensitive jako předchozí funkce a také není multi-byte
safe (diakritika se bere jako dva znaky). Ukažme si příklad:
$strrpos = "pak jsem si vzal boty, pak jsem klouzal na ledu"; print_r(strrpos($strrpos, "pak"));
Zde se hledaný řetězec "pak"
v textovém řetězci nachází
rovnou dvakrát. Jelikož funkce strrpos()
hledá až poslední
shodu, bude výstupem na stránku hodnota 23
, tedy dvacátý
třetí znak textového řetězce, což je první znak našeho hledaného
řetězce. Teď přidáme třetí parametr a ještě k tomu záporný:
$strrpos = "Dneska jsem uklouzl na ledu a natloukl jsem si nos"; print_r(strrpos($strrpos, "jsem", -12));
V tomto případě na stránku bude vypsaná hodnota 7
. Textový
řetězec je tedy uříznut o dvanáct znaků od konce, textový řetězec tedy
vypadá takto: "Dneska jsem uklouzl na ledu a natloukl"
. Hledaný
řetězec "jsem"
se vyskytuje v tomto uříznutém textu pouze
jednou, tudíž je to jediná shoda.
Pro psaní textu s diakritikou můžeme využít
multibyte safe variantu funkce s názvem
mb_strrpos()
.
stripos()
Stejně jako funkce strpos()
nám v textovém řetězci nalezne
první hledaný řetězec a vypíše, na jaké pozici textového řetězce se
nachází první znak hledaného řetězce. Funkce přijímá celkem 3
parametry, kde prvním z nich je textový řetězec, druhým je hledaný
řetězec a posledním parametrem je začátek, od kterého znaku v textovém
řetězci se bude hledaný řetězec vyhledávat. Na rozdíl od funkce
strpos()
je case-insensitive, tedy nezáleží na
velikosti písmen. Není multi-byte safe, tak si s diakritikou
dejte taky pozor Ukažme si
jednoduchý příklad:
$stripos = "Zebou mi RUCE!"; print_r(stripos($stripos, "ruce"));
Hledaný řetězec bude nalezen i přestože velikost písmen neodpovídá
shodě v textovém řetězci. Výstupem na stránku bude hodnota
9
.
Chceme-li do funkce psát text s diakritikou, využijeme
multibyte safe variantu funkce s názvem
mb_stripos()
.
strripos()
Funkce strripos()
je podobná funkci strrpos()
s
rozdílem, že je case-insensitive. Funkčnost je totožná,
tedy vyhledává poslední hledaný řetězec nacházející se v textovém
řetězci a vrátí pozici prvního znaku hledaného řetězce. Funkce
přijímá celkem 3 parametry, kde prvním z nich je náš textový řetězec,
druhým parametrem je hledaný řetězec a posledním parametrem je začátek,
od kterého znaku v textovém řetězci se bude hledaný řetězec vyhledávat.
Příkladem může být:
$strripos = "Venku se oteplilo, VeNku je hezky."; print_r(strripos($strripos, "VENKU"));
Nezáleží zde na velikosti písmen, hledaný řetězec
bude v textovým řetězci nalezen na 19
. pozici, jelikož se
jedná právě o poslední shodu v textovém řetězci. Výstupem na stránku
bude tedy hodnota 19
. Pokud by před hledaným řetězcem byl znak
s diakritikou (např. č
), bral by se tento znak jako dva znaky.
Výstupem by byla hodnota 20
, i když to je reálně
19
znaků.
Funkce strripos()
není multibyte
safe a v případě použití diakritiky v textu, funkce nebude
vypisovat správné hodnoty! Využijeme tedy multibyte safe
variantu funkce s názvem mb_strripos()
.
strpbrk()
Je funkce, která nalezne hledané znaky a po první shodě hledaného znaku
v textovém řetězci vrátí jeho zbytek. Pokud shoda nebude nalezena, funkce
vrátí false
. Funkce přijímá celkem 2 parametry, prvním je
náš textový řetězec a druhým jsou hledané znaky. Funkce je
case-sensitive a zároveň multi-byte safe.
Ukažme si pár příkladů:
$strpbrk = "teplota je pod nulou"; print_r(strpbrk($strpbrk, "jn"));
Zde je v textovém řetězci vyhledána shoda s hledanými znaky a znak
j
se textovém řetězci vyskytuje dříve než znak
n
, na stránku bude tedy vrácen zbytek textového řetězce
"je pod nulou"
. Na pořadí hledaných znaků v parametru
nezáleží. Je jedno, jestli hledáme "prvně" znak n
nebo
j
, oba znaky se kontrolují současně.
$strpbrk = "teplota je pod nulou"; print_r(strpbrk($strpbrk, "zů>!"));
Pokud však hledáme znaky, které se v textovém řetězci nenacházejí,
dostaneme hodnotu false
- nic se tedy nevypíše.
V další lekci, Vyhledávání textových řetězců v PHP III. část, si ukážeme další funkce pro vyhledávání textových řetězců.