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 12 - Vyhledávání textových řetězců v PHP

V minulé lekci, Porovnávání textových řetězců v PHP II. část, jsme si ukázali další funkce pro porovnávání textových řetězců.

V této lekci funkcí v PHP si vysvětlíme užitečné funkce pro vyhledávání textových řetězců a jejich částí.

strspn()

Je funkce, která vrátí počet hledaných znaků v řetězci. Pokud se ale v řetězci nachází před hledanými znaky znak, který mezi ně nepatří, vrátí funkce hodnotu 0. Funkce přijímá 4 parametry, kde prvním z nich je náš textový řetězec. Druhým parametrem je hledaný znak nebo skupina znaků. Třetím parametrem je pozice, odkud má funkce v textovém řetězci začít vyhledávat (nepovinný). Posledním parametrem je délka řetězce (v jak velké části řetězce budou znaky hledány) (nepovinný). Funkce je binary-safe. Ukažme si příklady:

$strspn = strspn("Znaky se nacházejí v této větě.",'Zzykan');
print_r($strspn);

Výstupem na stránku bude počet znaků, které se shodují v hledané masce 'Zzykan', avšak pouze do prvního znaku, který se v masce nenachází, v tomto případě je to mezera. Dostaneme tedy hodnotu 5.

$strspn = strspn("Hledané znaky se nacházejí v této větě.",'Zzykan');
print_r($strspn);

V tomto případě funkce vrátí hodnotu 0, jelikož se před maskou hledaných znaků nachází znaky, které se v ní nevyskytují. Sčítání znaků tedy pokračuje do první neshody, což je písmeno H, které nebude započítáno.

$strspn = strspn("Tyto znaky se nacházejí v této větě.",'Zzykan', 5);
print_r($strspn);

Přidáním třetího parametru začneme znaky vyhledávat až od 5. znaku. Řetězec "Tyto " společně s mezerou bude přeskočen a shody či neshody znaků v masce nebudou ověřeny. Funkce tedy začne ověřovat až od textového řetězce "znaky" kde při první neshodě znaku řetězce s maskou bude počítání ukončeno. Na výstup dostaneme hodnotu 5.

$strspn = strspn("Tyto znaky se nacházejí v této větě.",'Zzykan', 5, 3);
print_r($strspn);

Stejně jako v předchozím příkladu, vyhledávání a počítání znaků je posunuto o 5 znaků, avšak jsme také definovali 4. parametr, který nám limituje délku zbytku řetězce, v tomto případě na 3 znaky, tedy pouze porovnáváme řetězec "zna". Jelikož se všechny tyto znaky nacházejí v masce hledaných znaků, bude na výstup vrácena hodnota 3.

strcspn()

Je funkce, která vrátí počet znaků (tedy i mezer) nalezených do prvního výskytu hledaného znaku (nikoli za ním). Funkce přijímá čtyři parametry, kde prvním z nich je náš textový řetězec. Druhým parametrem je hledaný znak nebo skupina znaků (nepovinný parametr). Třetím parametrem je pozice, odkud má funkce v textovém řetězci začít vyhledávat (nepovinný). Posledním parametrem je délka řetězce (v jak velké části řetězce budou znaky hledány), parametr je taktéž nepovinný. Funkce je binary-safe, avšak diakritiku zase počítá jako dva znaky. Ukažme si příklady:

$strcspn = strcspn("Hello my strange PHP world!",'w');
print_r($strcspn);

V tomto textovém řetězci bude vyhledán první znak 'w' a na výstup dostaneme počet znaků před hledaným znakem. V tomto případě je to číslo 21.

Pokud chceme určit odkud bude funkce vyhledávat, přidáme druhý parametr:

$strcspn = strcspn("Hello world!",'w', 4);
print_r($strcspn);

Zde vyhledávání začne až od páté pozice, tedy znakem 'o'. Na výstup dostaneme číslo 16.

Chceme-li omezit velikost vyhledávání v textovém řetězci, využijeme třetí parametr:

$strcspn = strcspn("Hello world!",'w', 0, 4);
print_r($strcspn);

V tomto případě stejně jako u předchozího příkladu hledáme znak 'w' od začátku řetězce (od pozice 0), ale až do pozice 4, textový řetězec tedy není prohledáván celý, ale pouze jeho část "Hell". Můžeme si všimnout, že v této části řetězce se hledaný znak nenachází, funkce tedy vrátí délku části řetězce, tedy 4.

strstr()

Je funkce, která nalezne vyhledávaný řetězec a vrátí hledaný řetězec se zbytkem textového řetězce. Funkce přijímá celkem 3 parametry, kde prvním z nich je textový řetězec, druhým parametrem je vyhledávaný řetězec a třetím boolean hodnota (true nebo false), která nastavuje, zda bude vrácen zbytek textového řetězce od začátku ke shodě vyhledaného řetězce (true), nebo od shody vyhledaného řetězce ke konci (false). Funkce je case-sensitive, tedy záleží na velikosti písmen. Pro lepší pochopení si tuto problematiku ukažme na příkladech:

$strstr = "Jirka přijede později.";
print_r(strstr($strstr, "přijede"));

V textovém řetězci "Jirka přijede později." bude vyhledán řetězec "přijede" a vrátí hledaný řetězec se zbytkem celkového řetězce. Jelikož jsme nenastavili třetí parametr, je jeho defaultní hodnota false. Výstupem na stránku tedy bude "přijede později.".

$strstr = "Jirka přijede později.";
print_r(strstr($strstr, "přijede", true));

Příklad výše je stejný jako v příkladu výše, jen jsme uvedli třetí parametr. Ten zajistí, že nám na výstup vrátí řetězec od začátku textového řetězce do hledaného řetězce. Hledaný řetězec ale již nebude tvořit součást výstupu na stránku. Výstupem na stránku tedy bude "Jirka".

Pokud zadáme prázdný hledaný řetězec, dostaneme výjimku "Empty needle".

Funkce strstr() není multibyte safe! Pro správné hodnoty na výstupu funkce s řetězcem obsahujícím diakritiku, použijeme multibyte safe variantu mb_strstr()

stristr()

Tato funkce je má totožné vlastnosti, jako funkce strstr(). Jedinou výjimkou je však vlastnost case-insensitive, tedy nezáleží na velikosti písmen. Je to tedy funkce, která nalezne vyhledávaný řetězec a vrátí hledaný řetězec se zbytkem textového řetězce. Přijímá celkem 3 parametry, kde prvním z nich je textový řetězec, druhým parametrem je vyhledávaný řetězec a třetím boolean hodnota (true nebo false). Ten nastavuje, zda bude vrácen zbytek textového řetězce od začátku ke shodě vyhledaného řetězce (true) nebo od shody vyhledaného řetězce ke konci (false). Ukažme si příklad, v kterém je tato funkce oproti strstr() rozdílná:

$stristr = "Jirka přijede později.";
print_r(stristr($stristr, "PřijedE"));

Výstup bude stejný jako u funkce strstr(), ale hledaný řetězec bude vyhledán i přestože obsahuje rozdílnou velikost znaků.

Pokud zadáme prázdný hledaný řetězec (2. parametr), dostaneme taktéž výjimku "Empty needle".

Funkce stristr() není multibyte safe. Chceme-li psát text s diakritikou, využijeme tedy multibyte safe variantu funkce s názvem mb_stristr().

strchr()

Tato funkce je aliasem funkce strstr(), tedy má totožné vlastnosti. Nalezne vyhledávaný řetězec a vrátí hledaný řetězec se zbytkem textového řetězce. Funkce přijímá celkem 3 parametry, kde prvním z nich je textový řetězec, druhým parametrem je vyhledávaný řetězec a třetím boolean hodnota (true nebo false). Ta nastavuje, zda bude vrácen zbytek textového řetězce od začátku ke shodě vyhledaného řetězce (true), nebo od shody vyhledaného řetězce ke konci (false). Funkce je case-sensitive, tedy záleží na velikosti písmen. Ukažme si příklad:

$strchr = "Jirka přijede později.";
print_r(strchr ($strchr , "později"));

Stejně jako u funkce strstr(). Bude vyhledán hledaný řetězec v našem zadaném textovém řetězci a vrátí zbytek textového řetězce společně s hledaným řetězcem. Výstupem tedy je "později.".

strrchr()

Je funkce, která nalezne poslední shodu vyhledávaného znaku v našem textovém řetězci a vrátí zbytek textového řetězce. Funkce přijímá celkem 2 parametry, kde prvním z nich je textový řetězec, druhým parametrem je vyhledávaný znak. Druhý parametr může sice obsahovat více znaků (slovo), ale v potaz bude brán pouze první znak. Funkce je case-sensitive. Ukažme si příklad:

$strrchr = "Aleš došel nakoupit potraviny, Karel došel koupit dárky.";
print_r(strrchr($strrchr, "došel"));

Funkce strrchr() nalezne znak "d" (protože se bere v potaz pouze první znak v 2. parametru) ve slově "dárky" v druhé větě, protože jde o poslední shodu. Funkce vrátí zbytek textového řetězce včetně znaku shody. Výstupem je tedy textový řetězec "dárky.".

Dobrým příkladem pro tuto funkci je například k získání názvu souboru z cesty:

$strrchr = "/var/www/html/index.php";
print_r(strrchr($strrchr, "/"));

Na výstupu funkce bude /index.php.

Pokud zadáme prázdný hledaný řetězec, tak oproti předchozím funkcím na stránce neuvidíme žádnou chybovou hlášku ani hodnotu. Skutečností je, že funkce vrátí boolean s hodnotou false.

Funkce strrchr() není multibyte safe. Pro zaručení správného výstupu funkce při psaní textů s diakritikou použijeme její multibyte safe variantu mb_strrchr().

V další lekci, Vyhledávání textových řetězců v PHP II. část, si ukážeme další funkce pro vyhledávání textových řetězců.


 

Předchozí článek
Porovná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)
Vyhledávání textových řetězců v PHP II. část
Č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