Jak jsem slíbil v minulém díle, dnes (a příště) se podíváme na velmi důležitou skupinu funkcí – funkce pro práci s řetězci. Nejprve si však zopakujeme, co víme o řetězcích a práci s nimi z minulých dílů.

Operátorem, který slouží ke spojování („sčítání“) řetězců, je tečka (.). Zde je malý příklad:

$rceni = „Neni “ . „koure “ . „bez “ . „ohne.“;

Výsledkem přiřazení je pochopitelně to, že v proměnné $rceni je obsaženo pořekadlo Není kouře bez ohně. Všimněte si tečky na konci – protože je uvnitř uvozovek, pochopitelně neslouží jako operátor. Dalšími funkcemi, se kterými jsme se už seznámili, jsou Implode a Explode (je možné používat i jejich synonyma Join a Split, které jsou jistě povědomé programátorům v ASP). Tyto funkce slouží k rozdělování řetězce obsahujícího oddělovače do pole. Opět bude nejlepší příklad jejich použití:

$data = „Milan#Novák#168#56#35#2“;
$pole = Explode („#“, $data);
$data2 = Implode ($pole, „:“);

Pomocí příkazu Explode přiřadíme do buněk pole části řetězce mezi oddělovačem #, tj. $pole[0] obsahuje Milan, $pole[1] Novák atd. Příkaz Implode je inverzní – po jeho vykonání máme v $data[2] řetězec, který se od původního liší tím, že místo # používá jako oddělovač :. Občas se může hodit příkaz List, který přiřazuje prvky pole do proměnných:

$data = „Milan#Novák#168#56#35#2“;
List ($jmeno, $prijmeni, $vyska, $vaha, $vek, $pocet_deti) = Explode („#“, $data);

Přímo k jednotlivým znakům řetězce můžeme přistupovat, jako kdyby šlo o pole – např. u výše uvedeného řetězce $data je v $data[0] M, v $data[1] i, v $data[2] l atd. Důležité je si pamatovat, že podobně jako prvky pole jsou v PHP číslovány od nuly, pokud není určeno jinak, stejně jsou od nuly číslovány i znaky v řetězci. K tomu, abychom mohli zjistit, jak je řetězec dlouhý, slouží funkce StrLen (většina funkcí pro práci s řetězci začíná písmeny Str (string)). Funkce StrToUpper, resp. StrToLower, převádějí řetězec na samá velká, resp. samá malá písmena. Opět názorný příklad:

$vyrok = „Vsichni Kretane jsou lhari.“;
$delka = StrLen ($vyrok);
$velky_vyrok = StrToUpper ($vyrok);
$maly_vyrok = StrToLower ($vyrok);

Nyní by měla být v proměnné $delka hodnota 27 (pokud jsem dobe počítal :-), v proměnné $velky_vyrok hodnota „VSICHNI KRETANE JSOU LHARI.“ a v proměnné $maly_vyrok hodnota „vsichni kretane jsou lhari.“ Co se stane, pokud budeme chtít vše hezky česky? Záleží na instalaci PHP :-), funkce StrToUpper a StrToLower s českými znaky správně fungovat mohou, ale nemusí. To nám však nemusí nijak vadit, protože máme k dispozici velmi šikovnou nahrazovací funkci StrTr, která je o dost univerzálnější a funguje bez problémů. Jednou z možností jejího využití je odstranění českých znaků z řetězce:

$jazykolam = „Příliš žluťoučký kůň úpěl ďábelské ódy.“
$bez_diakritiky = StrTr ($jazykolam, „áäčďéěëíňóöřšťúůüýžÁÄČĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽ“, „aacdeeeinoorstuuuyzAACDEEEINOORSTUUUYZ“);

Funkce StrTr má celkem tři argumenty – vstupní řetězec, řetězec znaků, které se mají nahradit, a řetězec zanků, kterými se mají nahradit. Funkce nahradí ve vstupu všechny výskyty znaku á znakem a, znaku ä znakem a, znaku č znakem c, znaku ď znakem d atd. Vždy se bere postupně po jednom znaku z druhého a třetího řetězce ve funkci. Z výše uvedeného příkladu by vše mělo být jasné.

Shrnutí anebo co si je třeba pamatovat

  • Tečka (.) spojuje řetězce.
  • Explode (nebo Split) rozdělí řetězec do pole, Implode (nebo Join) vše zase spojí.
  • StrLen slouží k zjištění délky řetězce.
  • StrToUpper převádí řetězec na velká písmena, StrToLower na malá. Tyto funkce mohou mít problémy s češtinou.
  • Univerzální nahrazovací funkce, která se hodí např. k odstranění písmen s diakritikou z textu, je StrTr.

V příštím díle se podíváme na další základní funkce pro práci s řetězci – na zjišťování, zda řetězec obsahuje daný podřetězec, a na to, jak nahradit nejen znak za znak (jak to umí funkce StrTr).

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

  1. Když použiji funci

    StrTr ($jazykolam, „áäčďéěëíňóöřšťúůüýžÁÄČĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽ“, „aacdeeeinoorstuuuyzAACDEEEINOORSTUUUYZ“);

    tak mi například č převede na oe :-(
    Všechny soubory jsou přitom v UTF-8 bez BOM.

Odpovědět