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


 

Předchozí článek
Vyhledávání textových řetězců v PHP
Všechny články v sekci
PHP funkce
Přeskočit článek
(nedoporučujeme)
Vyhledávání textových řetězců v PHP III. čá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