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:
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
:
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:
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:
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á |
$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:
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:
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
:
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:
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:
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 |
$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:
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:
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:
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:
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:
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:
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:
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:
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:
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.