V předchozím článku jsme si ukázali základy toho, jak pracovat s řetězci v PHP. V tomto díle pokročíme k složitějším funkcím, které slouží k vyhledávání a nahrazování. Na úvod si ovšem dáme ještě něco funkcí relativně jednodušších.

K získání části řetězce slouží funkce SubStr. Má tři parametry – řetězec, pozici 1. znaku a délku. Vrací pochopitelně část řetězce určené délky od daného znaku. Pokud je pozice 1. znaku záporné číslo, řetězec bude se pozice počítat od konce. Pokud je záporná délka, bude řetězec tolik zanků od konce končit. Není-li délka vůbec zadána, funkce vrátí vše od prvního znaku do konce řetězce. Opět nejlepší ilustrací jsou příklady:

$vysledek = SubStr („kolotoč“, 1, 3); // vrátí „olo“
$vysledek = SubStr („kolotoč“, 1); // vrátí „olotoč“ (délka není zadána, proto je vráceno vše do konce)
$vysledek = SubStr („kolotoč“, -3); // vrátí „toč“ (délka není zadána, pozice prvního znaku je záporná, proto se počítá od konce)
$vysledek = SubStr („kolotoč“, 0, 5); // vrátí „kolot“ (prvních pět znaků)

Například pro ošetření vstupních dat je užitečná funkce Trim, která ořeže zbytečné znaky (tj. mezery a formátovací znaky, jako je třeba znak pro nový řádek). Jejími blízkými příbuznými jsou funkce LTrim (ořezává jen zleva) a RTrim (ořezává jen zprava). Příklad:

$orezane = Trim (“ vstupni data /n/n/n“); // vrací „vstupni data“ (/n je znak pro přechod na nový řádek)

K nahrazení určitého podřetězce v řetězci jiným slouží funkce Str_Replace (ta byla podle on-line manuálu do PHP přidána ve verzi 3.0.6, ale spolehlivě pracovala až od verze 3.0.8 – tyto starší verze se však už vyskytují zřídka). Obsahuje tři parametry – CO nahradit, ČÍM nahradit, V ČEM nahradit. Nejlépe ilustruje následující příklad:

$pozdrav = Str_Replace („jmeno“, „Pavle“, „Vítej na mé stránce, jmeno.“);

Výše uvedený příklad nahradí všechny výskyty řetězce jmeno řetězcem Pavle, takž evýsledkem bude pozdrav Vítej na mé stránce, Pavle. Co dělat, pokud chceme tuto funkci využívat, ale naše verze PHP patří k těm starším? Snadná pomoc – naštěstí existuje vedle Str_Replace funkce EReg_Replace, která pracuje úplně stejně (to není tak úplně pravda, protože EReg_Replace toho umí více, ovšem pro jednoduché nahrazování je zase pomalejší). Pokud tedy budete mít se Str_Replace problémy, nahraďte ji EReg_Replace, výsledek bude stejný (tedy správný, ne že by byly zase problémy :-).

Často potřebujeme zjistit, zda se v nějkém řetězci vyskytuje určitý podřetězec. K tomu nám poslouží funkce StrPos, která vrací pozici hledaného textu v řetězci. První parametr je tedy řetězec, druhý text, který v něm hledáme. Pokud řetězec podřetězec neobsahuje, funkce vrací false. V tom se ovšem skrývá malý problém – flase odpovídá hodnotě nula, proto se funkce chová stejně i tehdy, pokud je hledaný text úplně na začátku řetězce. Lze to obejít různými způsoby, mně připadá nejlepší na začátek prohledávaného řetězce přidat nějaký bezproblémový znak (např. mezeru), potom se funkce chová tak, jak potřebujeme (pokud však chceme dále pracovat s pozicí nalezeného textu, musíme kvůli přidané mezeře odečíst jedna!). Takto může vypadat netradiční test HIV pozitivity :-):

if (StrPos (“ “ . $pacient, „HIV“)) Poslat_na_leceni ($pacient);

Pokud řetězec $pacient obsahuje text HIV (díky přidané mezeře může být tento text i na začátku), funkce StrPos vrátí nemulovou hodnotu, podmínka je splněna a zavolá se funkce, která pacienta pošle na léčení. K tomuto poněkud abstraktnímu příkladu připojím jeden užitečnější:

if (StrPos ($HTTP_USER_AGENT, „MSIE 5“)) $browser = „IE5“;

Proměnná $HTTP_USER_AGENT je jedna z takzvaných proměnných prostředí a obsahuje řetězec, který identifikuje prohlížeč a operační systém návštěvníka. Další proměnnou prostředí, o které jsem se už zmiňoval, je $REMOTE_ADDR, která obsahuje IP adresu, ze které přišel požadavek na stránku. Výše uvedený příklad může snadno otestovat, zda uživatel používá prohlíže Internet Explorer 5. Tento a podobné testy se dají využít třeba k přizpůsobení stránky konkrétnímu prohlížeči.

Shrnutí anebo co si je třeba pamatovat

  • Funkce SubStr vrací část řetězce.
  • Funkce Trim, LTrim a RTrim ořezávají zbytečné znaky (mezery apod.).
  • Str_Replace a EReg_Replace se hodí k nahrazování určitého podřetězce jiným.
  • StrPos vrací pozici hledaného textu v řetězci. Pokud řetězec text neobsahuje, vrací false.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět