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

7. diel - Vlastnosti textových reťazcov a práce s medzerami

V predchádzajúcej lekcii, Tagy v textovom reťazci , sme si vysvetlili, ako odstraňovať, konvertovať tagy a odstraňovať spätné lomky pomocou funkcií v PHP.

V tejto lekcii kurze PHP funkcií si ukážeme, aké vlastnosti z textových reťazcov možno získať a ako pracovať s medzerami.

Odstraňovať lomítka, konvertovať špeciálne znaky na HTML entity a rôznymi spôsobmi spájať alebo deliť textové reťazce sme sa už naučili. Ale ako napríklad zistíme, aká je dĺžka nášho textového reťazca? Aký počet slov náš textový reťazec vlastne má? Ako odstrániť nepotrebné medzery na začiatku a na konci textových reťazcov? Poďme si toto všetko ukázať.

strlen()

strlen() je veľmi bežnou funkcií v PHP pre zistenie dĺžky textového reťazca na počet bajtov. Funkcia strlen() prijíma iba jeden parameter, ktorým je náš textový reťazec. Ukážme si to na príklade:

$text = "Hello world";
$len = strlen($text);
print($len);

Týmto spôsobom zistíme dĺžku zadaného textového reťazca. Výsledkom je dĺžka textového reťazca na počet bajtov:

Funkce strlen()
localhost

Môžeme si všimnúť, že dĺžka reťazca "Hello world" je 11. Funkcia strlen() do dĺžky totiž započítava aj medzery.

Funkcia strlen() nie je tzv. multi-byte funkcií, ktoré by sme mali poznať už z minulých lekcií. Ak napíšeme textový reťazec s českou diakritikou, dostali by sme nesprávnu dĺžku reťazca. Pre podporu češtiny alebo iného kódovanie použijeme podobnú funkciu mb_strlen() ktorá prijíma o jeden parameter navyše a to typ kódovania.

Ukážme si rozdiel:

$text = "Řeřicha";
$len = strlen($text); // Délka textového řetězce s českou diakritikou pomocí funkce strlen()
print($len);

Vypíše nám to v prehliadači hodnotu 9:

Diakritika strlen
localhost

Teraz použijeme funkciu mb_strlen() s kódovaním UTF-8:

$text = "Řeřicha";
$len = mb_strlen($text, "UTF-8"); // Délka textového řetězce s českou diakritikou pomocí funkce mb_strlen()
print($len);

Korektne sa nám vypíše dĺžka reťazca:

Funkce mb_strlen()
localhost

str_word_count()

str_word_count() je funkcia, ktorá vráti počet slov obsiahnutých v textovom reťazci. Prijíma celkom 3 parametre:

  • prvým z nich je náš textový reťazec
  • druhým parametrom je typ návratovej hodnoty (return)
  • a tretím parametrom je znak (char), ktorý bude vypočítaný ako slovo.

Slová v textovom reťazci spočítame týmto spôsobom:

$text = "This sentence is in english.";
$delka = str_word_count($text);
print($delka);

Použitím tejto funkcie dostaneme ako výsledok počet slov:

Funkce str_word_count()
localhost

Teraz si viac popíšeme, aké hodnoty môže druhý parameter tejto funkcie prijímať. V tabuľke nájdeme všetky hodnoty, ktoré je možné do tohto parametra dosadiť:

hodnota popis
0 Je defaultný hodnota. Vráti počet slov ako číslo
1 Vráti textové pole s jednotlivými slovami
2 Vráti textové pole s kľúčom pozície slová v textovom poli a hodnotou aktuálneho slová
Ukážme si príklad:
$text = "This sentence is in english.";
$delka = str_word_count($text, 1);
print_r($delka);

Tu sme ako druhý parameter zadali hodnotu 1 a tak dostaneme textové pole o jednotlivých slovách:

2. str_word_count()
localhost

Ak chceme ako kľúč textového poľa pozíciu slová v textovom reťazci a ako hodnotu slovo na danej pozícii, zadáme ako druhý parameter hodnotu 2:

$text = "This sentence is in english.";
$delka = str_word_count($text, 2);
print_r($delka);

Výsledkom je textové pole:

2. str_word_count()
localhost

Tretím parametrom je znak, ktorý bude počítaný funkcií ako slovo. Znakov môžeme napísať hneď niekoľko. Príkladom môže byť tento textový reťazec:

$text = "Paul & Peter are good friends";
$delka = str_word_count($text, 0, "&");
print($delka);

Znak znaku at & funkcie nepočíta ako jedno slovo, teda správny počet slov v tomto reťazci má byť 5. Avšak tu máme uvedenú výnimku a to v treťom parametri, znak znaku at bude počítaný ako jedno slovo, počet slov bude teda 6:

3. str_word_count()
localhost

Ukážme si ďalší príklad:

$text = "Paul & Peter are the best fr1ends!";
$delka = str_word_count($text, 1);
print_r($delka);

Ak u tohto textového reťazca nezadáme do tretieho parametra žiadne znaky, ktoré majú byť počítané ako ďalšie slovo, reťazec bude rozdelený nasledovne:

4. str_word_count()
localhost

Počet slov je 7, čo je správny výsledok, ale veta je nesprávne rozdelená. Pridáme teda do tretieho parametra znaky, ktoré budeme považovať ako jedno slovo alebo jeho súčasť:

$text = "Paul & Peter are the best fr1ends!";
$delka = str_word_count($text, 1, "&1");
print_r($delka);

Výsledkom je správne rozdelené textové pole:

5. str_word_count()
localhost

Tretí parameter char funkcie str_word_count() bol pridaný až vo verzii PHP 5.1.

count_chars()

Je funkcia, ktorá vracia informácie o znakoch použité v textovom reťazci. Prijíma celkom dva parametre, kde prvým z nich je náš textový reťazec a druhým je mód. Funkcia count_chars() má hneď niekoľko použití, závisí totiž na voľbe druhého parametru, teda módu:

mód popis
0 Pole, kde kľúčom je poradie znaku tabuľky ASCII a hodnotou je počet výskytov daného znaku
1 Pole, kde kľúčom je poradie znaku tabuľky ASCII a hodnotou je počet výskytov daného znaku, vypisuje výskyty znakov väčšie ako nula
2 Pole, kde kľúčom je poradie znaku tabuľky ASCII a hodnotou je počet výskytov daného znaku, vypisuje iba znaky, ktoré sa v reťazci nevyskytujú
3 Textový reťazec, ktorý vráti iba vyskytujúce sa znaky v textovom reťazci Zoradiť podľa ASCII tabuľky
4 Textový reťazec, ktorý vráti všetky znaky, ktoré sa nevyskytujú v textovom reťazci
Vypísaním príkladov každého módu by nám v tejto chvíli pravdepodobne nepovedalo vôbec nič. Môžeme si ukázať program, ktorý nám z textového reťazca vypíše vyskytujúce sa znakmi za pomocou módu 1:
$text = "Hello world";

// Zjistí každý znak a počet výskytů v textovém řetězci jako pole
foreach (count_chars($text, 1) as $i => $pocet) {
    print("Znak '".chr($i)."' se v řetězci vyskytuje ".$pocet."<br>"); // Vypíše počet výskytů znaku v řetězci
}

Program skontroluje celú ASCII tabuľku a do poľa umiestni znaky a ich výskyty v našom textovom reťazci, preto sme tu zvolili mód 1. Funkcia chr() prijíma parameter $i hodnoty tabuľky ASCII a vráti nám hľadaný znak z tabuľky. Tabuľka ASCII vyzerá takto:

Tabuľka ASCII - PHP funkcie
Kód 97 je teda napríklad malé a, kód 65 je písmeno A. Môžeme teda vidieť, že tabuľka je zoradená podľa abecedy (mám na mysli iba aZ). Výsledok kódu vyššie teda na stránke bude:

Vypsání výskytů znaků
localhost

Znaky sú zoradené podľa tabuľky ASCII. Takto sme jednoducho vypísali znaky a počty výskytov, ktoré sa v textovom reťazci objavujú. Znaky, ktoré sa nám v texte vyskytujú, môžeme vypísať aj vo forme reťazca a to pomocou módu 3:

$text = "Hello world";
print(count_chars($text, 3));

Výsledkom je:

Funkce count_chars()
localhost

Opäť sú znaky Zoradiť podľa ASCII tabuľky.

Funkcia count_chars() nie je Multi-byte safe, teda nepodporuje slovenskú diakritiku a niektoré znaky nemusia byť správne spočítané a zobrazené!

Práca s medzerami

Teraz si ukážeme pár funkcií pre prácu s medzerami.

trim()

Funkcia trim() slúži na odstraňovanie medzier alebo tiež na odstraňovanie znakov z oboch strán textového reťazca. Táto funkcia je veľmi používaná v prípade, keď sa chceme zbaviť nechcených medzier z oboch strán. Ukážme si príklad:

$text = "   Toto je text s mezerami    ";
$trim = trim($text);
print($trim);

Medzery sa nám z oboch strán textového reťazca odstráni a na stránke uvidíme text bez medzier na začiatku a na konci:

Funkce trim()
localhost

Funkcia je často využívaná pre odstránenie medzier z textových polí a následne sú dáta ukladané do databázy. Ak sa chceme zbaviť na oboch stranách reťazca iných nechcených znakov okrem medzier, môžeme ich do druhého parametra vypísať:

$text = "ĚRNěkteré znaky jsou nechtěnéŠŘ";
$trim = trim($text, "ĚRŠŘ");
print($trim);

Pomocou funkcie trim() odstránime nechcené znaky v textovom reťazci, teda ĚR a ŠŘ. Na stránke potom uvidíme reťazec:

Funkce trim()
localhost

ltrim()

Na rozdiel od funkcie trim() odstraňuje prebytočné medzery alebo nechcené znaky len vľavo, teda na začiatku textového reťazca. Ukážme si jednoduchý príklad:

$text = "        <- mezery zleva";
$ltrim = ltrim($text);
print($ltrim);

Medzery zľava sa odstráni a na stránke zostane zvyšok reťazca:

Funkce ltrim()
localhost

Do druhého parametru napíšeme nechcené znaky pre ich odstránenie. Avšak znaky budú odstránené len na ľavej časti textového reťazca:

$text = "RDodstranění nechtěných znakůBS";
$ltrim = ltrim($text, "RDBS");
print($ltrim);

Výsledným textom teda bude:

Funkce ltrim()
localhost

Môžeme si všimnúť, že znaky BS na konci reťazca neboli odstránené.

rtrim()

Na rozdiel od funkcie ltrim() odstraňuje medzery a nechcené znaky na konci textového reťazca. Prijíma rovnaký počet parametrov. Príklad funkcie rtrim():

$text = "mezery zprava ->        ";
$rtrim = rtrim($text);
print($rtrim);

Medzery sprava sa odstráni a na stránke zostane zvyšok reťazca:

Funkce rtrim()
localhost

Do druhého parametru zapisujeme nechcené znaky, ktoré budú odstránené sprava, teda na konci reťazca:

$text = "RDodstranění nechtěných znakůBS";
$rtrim = rtrim($text, "RDBS");
print($rtrim);

Výsledným textom bude:

Funkce rtrim()
localhost

Tu došlo k odstráneniu znakov na konci reťazca. Znaky RD oproti funkciu ltrim() na začiatku zostali.

Nechcené znaky v druhom parametra funkcie trim(), ltrim(), rtrim() zapisujeme vždy do úvodzoviek (alebo apostrofov)!

V ďalšej lekcii, Opakovanie textových reťazcov v PHP , si vysvetlíme, ako opakovať jednotlivé znaky v textových reťazcoch a časti textových reťazcov.


 

Predchádzajúci článok
Tagy v textovom reťazci
Všetky články v sekcii
PHP funkcie
Preskočiť článok
(neodporúčame)
Opakovanie textových reťazcov v PHP
Článok pre vás napísal Pavel Vaněček
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity