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ů.
