Lekce 14 - Vyhledávání textových řetězců v PHP III. část
V minulé lekci, Vyhledávání textových řetězců v PHP II. část, jsme si ukázali další funkce pro vyhledávání textových řetězců.
Ve třetím dílu lekce 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.
substr_count()
Funkce substr_count()
nám spočítá počet výskytů
podřetězce v textovém řetězci. Funkce vrací celočíselné hodnoty (počet
výskytů podřetězce). Přijímá celkem 4 parametry, prvním z nich je náš
textový řetězec, druhým je hledaný podřetězec, třetí parametr je pozice
začátku od které bude funkce počítat výskyty podřetězce. Posledním
parametrem je délka našeho řetězce, na kterém budou hledány výskyty
podřetězce. Poslední dva parametry nejsou povinné. Funkce je
case-sensitive (záleží na velikosti písmen). Funkce není
multibyte safe!. Nepodporuje tedy diakritiku a s použitím třetího a
čtvrtého parametru můžeme tak dostat chybný výsledek výstupu.
Pokud je součet třetího a čtvrtého parametru větší než délka textového řetězce, dostaneme chybovou hlášku s varováním o překročení délky řetězce.
Ukažme si některé příklady:
$substr_count = "Říkáme mu zaseklý, zaseklý gramofon"; print_r(substr_count($substr_count,"zaseklý"));
Funkce nám na výstup vrátí hodnotu 2
, jelikož podřetězec
"zaseklý"
byl nalezen dvakrát. Další příklad s třetím
parametrem:
$substr_count = "Dneska nejdu nikam, nejdu!"; print_r(substr_count($substr_count, "nejdu", 13));
Přidáním třetího parametru jsme zajistili posunutí začátku, od
kterého bude funkce vyhledávat výskyty podřetězce. Jelikož je začátek
posunut přesně o 13 znaků, funkce bude vyhledávat shody
pouze na části řetězce "nikam, nejdu!**"
. Na výstup tedy
dostaneme hodnotu 1
. Příklad se všemi parametry:
$substr_count = "„nikdy neodstoupim, nikdy!“"; print_r(substr_count($substr_count, "nikdy", 0, 18));
Přidáním čtvrtého parametru určíme novou délku textového řetězce,
na které bude funkce vyhledávat podřetězec "nikdy"
.
Podřetězec bude tedy vyhledáván na úseku textu
"„nikdy neodstoupim"
a na výstup dostaneme hodnotu
1
.
Funkce substr_count()
nespočítá překrývající se
podřetězce. Například:
$substr_count = "xyzxyzxy"; print_r(substr_count($substr_count, "xyzxy"));
Na výstup dostaneme hodnotu 1
, tedy byl nalezen pouze jeden
výskyt zadaného podřetězce.
Multibyte safe variantou funkce je
mb_substr_count()
, avšak nemůžeme zde určit odkud bude funkce
prohledávat textový řetězec (třetí parametr) ani novou délku řetězce
(čtvrtý parametr). Jako třetí parametr funkce přijímá typ kódování
(např. UTF-8
).
str_starts_with()
Je funkce pro zjištění, zda náš textový řetězec začíná zadaným textovým řetězcem. Tato funkce je dostupná od verze PHP 8.0 a přijímá pouze dva parametry. Prvním je náš textový řetězec a druhým parametrem je řetězec, který v prvním řetězci vyhledá, zda jím začíná nebo ne. Funkce je case-sensitive, tedy záleží na velikosti písmen. Ukažme si některé příklady použití:
if (str_starts_with('Byl o tom poučen', 'Byl')) { echo "Pravda"; } else { echo "Nepravda"; }
Jestliže náš textový řetězec začíná řetězcem "Byl"
,
potom funkce vrátí hodnotu true
a provede se vypsání textu
"Pravda"
z bloku podmínky. Další příklad:
if (str_starts_with('BYL o tom poučen', 'byl')) { echo "Pravda"; } else { echo "Nepravda"; }
Zde můžeme vidět opačný případ. Jelikož záleží na velikosti
písmen, vrátí funkce hodnotu false
i přestože se v prvním
řetězci slovo "byl"
vyskytuje, ale s velkými písmeny. Na
stránku se nám tedy vypíše "Nepravda"
.
if (str_starts_with('abc', '')) { echo "Vždy pravda!"; }
Je vždy pravdou, že textové řetězce začínají prázdným řetězcem.
Na stránce tedy uvidíme text "Vždy pravda!"
.
str_ends_with()
Je funkce pro zjištění, zda náš textový řetězec končí zadaným řetězcem. Tato funkce je dostupná od verze PHP 8.0 a přijímá pouze dva parametry. Prvním je náš textový řetězec a druhým parametrem je řetězec, který v prvním řetězci vyhledá, zda jím řetězec končí nebo ne. Funkce je case-sensitive, tedy záleží na velikosti písmen. Ukažme si nějaké příklady:
if (str_ends_with('Něco končí a něco začíná', 'začíná')) { echo "Pravda"; } else { echo "Nepravda"; }
Zde můžeme vidět, že opravdu náš textový řetězec končí řetězcem
"začíná"
. Funkce tedy vrátí hodnotu true
a
vypíše se na stránku text "Pravda"
. Další příklad:
if (str_ends_with('Něco končí a něco začíná', 'ZAČÍNÁ')) { echo "Pravda"; } else { echo "Nepravda"; }
Stejně jako u funkce str_starts_with()
i zde záleží na
velikosti písmen. Textový řetězec tedy nekončí řetězcem
"ZAČÍNÁ"
a proto se na stránku vypíše
"Nepravda"
. Poslední příklad:
if (str_ends_with('abc', '')) { echo "Vždy pravda!"; }
Je vždy pravdou, že textové řetězce končí a začínají prázdným
řetězcem (respektive hodnotou NULL
). Na stránce tedy uvidíme
text "Vždy pravda!"
.
str_contains()
Funkce str_contains()
nám ověří, zda se v našem textovém
řetězci nachází hledaný řetězec a poté vrátí hodnotu true
v případě úspěchu a hodnotu false
v případě opačném. Tato
funkce je dostupná od verze PHP 8.0 a přijímá také pouze
dva parametry. Prvním je náš textový řetězec a druhým je hledaný
řetězec. Funkce je case-sensitive, tedy záleží na
velikosti písmen. Ukažme si ukázky:
if (str_contains('S radostí jsem mu oznámil, že vyhrál.', 'mu')) { echo "Pravda"; } else { echo "Nepravda"; }
Pokud se v našem textovém řetězci nachází hledaný řetězec, bude na
stránku vypsán text "Pravda"
v opačném případě
"Nepravda"
. Jelikož se slovo "mu"
vyskytuje v
textovém řetězci, vypíše se text "Pravda"
. Další
příklad:
if (str_contains('S radostí jsem mu oznámil, že vyhrál.', 'RADOSTÍ')) { echo "Pravda"; } else { echo "Nepravda"; }
Funkce je case-sensitive, tím pádem nebude hledaný řetězec v našem
textovém řetězci nalezen a vypíše se "Nepravda"
. Další a
zároveň poslední příklad:
if (str_contains('abc', '')) { echo "Vždy pravda!"; }
Jestliže kontrolujeme existenci prázdného řetězce, dostaneme vždy
hodnotu true
jako u funkcí výše. Na stránce tedy uvidíme text
"Vždy pravda!"
.
V následujícím kvízu, Kvíz - Porovnávání a vyhledávání textových řetězců v PHP, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.