IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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


 

Předchozí článek
Vyhledávání textových řetězců v PHP II. část
Všechny články v sekci
PHP funkce
Přeskočit článek
(nedoporučujeme)
Kvíz - Porovnávání a vyhledávání textových řetězců v PHP
Článek pro vás napsal Pavel Vaněček
Avatar
Uživatelské hodnocení:
5 hlasů
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity