IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

4. diel - Rozdeľovanie a spájanie textových reťazcov - 2. diel

V predchádzajúcej lekcii, Rozdeľovanie a spájanie textových reťazcov , sme si vysvetlili, ako rozdeľovať a spájať textové reťazce pomocou funkcií.

V dnešnom diele si vymenujeme a detailne popíšeme ďalšie funkcie pre rozdeľovanie a spájanie textových reťazcov, ktoré sme si zatiaľ neprebrali.

substr()

Najčastejšie používaná funkcia v PHP pre vrátenie časti textového reťazca. Funkcia substr() prijíma celkom 3 parametre, prvým z nich je náš textový reťazec, druhým parametrom funkcia je číselná hodnota, od akej pozície textový reťazec začína. Posledným parametrom je dĺžka vráteného textového reťazca. Ukážme si jednoduchý príklad tejto funkcie:

$text = "Text pro ukázku funkce substr()";
$substr = substr($text, 16);
print($substr);

Je vhodné spomenúť, že znak á je tzv. Multi-byte znak a je teda braný ako dva znaky. Tak je to rovnaké napríklad aj s háčikmi, napríklad znak č. Takých funkcií, ktoré nepodporujú tieto znaky, bude oveľa viac. Preberieme si ich všetky v tomto kurze.

Funkcia substr() s hodnotou 16 druhého parametru štart posúva začiatok nášho textového reťazca. Na stránke uvidíme časť reťazca:

Funkce substr()
localhost

Dostaneme iba text posunutý o 16 pozícií zľava. Ak však chceme posunúť začiatok textového reťazca sprava, využijeme záporných čísel hodnoty druhého parametra:

$text = "Text pro ukázku funkce substr()";
$substr = substr($text, -8);
print($substr);

Začiatok bude posunutý sprava o 8 znakov:

Funkce substr()
localhost

Pokiaľ bude hodnota druhého parametra nulová:

$text = "Text pro ukázku funkce substr()";
$substr = substr($text, 0);
print($substr);

funkcie substr() vráti celý textový reťazec:

Funkce substr()
localhost

Tretím parametrom definujeme dĺžku nášho textového reťazca. Ukážme si príklad:

$text = "Text pro ukázku funkce substr()";
$substr = substr($text, 0 , 16);
print($substr);

Hodnota 16 v treťom parametri určuje novú dĺžku textového reťazca. Druhý parameter s nulovou hodnotou tu nehrá žiadnu úlohu:

Funkce substr()
localhost

Ako môžeme vidieť, dĺžka reťazca je naozaj 16 a začiatok nie je nijako posunutý. Zaujímavejšie je, keď druhý parameter nebude nulový:

$text = "Text pro ukázku funkce substr()";
$substr = substr($text, 5 , 16);
print($substr);

Druhý parameter s hodnotou 5 sa spoločne s limitáciou dĺžky textového reťazca začne správať ako posun zľava sa zachovaním zadanej dĺžky:

Funkce substr()
localhost

Začiatok zľava je posunutý o 5 pozícií a zároveň celková dĺžka reťazca je 16. Pre lepšie pochopenie si ukážeme tento problém graficky:

PHP funkcie

Pre podporu českej diakritiky využijeme funkciu s multi-byte podporou mb_substr(), kde posledným parametrom je typ kódovania.

Dáme si teda príklad tejto funkcie s textom presne o počte 23 znakov:

$text = "Ukázka české diakritiky";
$mb_substr = mb_substr($text, 0, 23, "UTF-8");
print($mb_substr);

Na stránke uvidíme bezchybne vypísaný reťazec:

Funkce mb_substr()
localhost

Bez podpory multi-byte znakov by text vyzeral takto:

Funkce substr()
localhost

chunk_split()

Je funkcia pre rozdeľovanie znakov v textovom reťazci a nahrádzanie iného znaku na mieste rozdelenie. Funkcia prijíma celkom tri parametre, kde prvým z nich je náš textový reťazec. Druhým parametrom je dĺžka kúsku (tzv. Chunk). Pomocou neho určíme, po ako dlhých kúskov textový reťazec bude delený. Tretím parametrom je znak, ktorý bude vypísaný pri každom delení kúsku, defaultná hodnotou je zalomenie riadku \r\n. Ukážme si príklad na funkciu chunk_split():

$text = "Petr a Jana byli doma";
$chunk_split = chunk_split($text, 1, ".");
print($chunk_split);

Náš textový reťazec bude rozdelený po jednotlivom znaku 1 a na mieste rozdelenie bude vypísaná bodka .. Reťazec na stránke bude zobrazený takto:

Funkce chunk_split()
localhost

Reťazec môžeme tiež rozdeliť po niekoľkých znakoch, napríklad u každého tretieho znaku môže byť na mieste rozdelenia akýkoľvek znak alebo niekoľko znakov, ktoré nás napadnú:

$text = "Toto jsou symboly kruhu";
$chunk_split = chunk_split($text, 3, '°');
print($chunk_split);

Každý tretí znak 3 bude nahradený symbolom kruhu °. Na stránke uvidíme:

Funkce chunk_split()
localhost

Ak vynecháme posledný parameter a druhý parameter bude mať hodnotu 1, je každý znak zalomený na novú riadku:

$text = "Hello world!";
$chunk_split = chunk_split($text, 1);
print($chunk_split);

Ak by sme na našom prehliadači zobrazili zdrojový kód stránky, uvidíme každý znak zalomený na novú riadku. Avšak na stránke uvidíme textový reťazec, kde každý znak je rozdelený medzerou:

Funkce chunk_split()
localhost

Môžeme si skúsiť spustiť skript cez príkazový riadok. Najprv si nájdeme cestu k súboru .php a potom súbor spustíme príkazom php, napr:

php C:\wamp\www\chunk_split.php

V konzole sa nám vypíše každý znak na nové riadku:

H
e
l
l
o

w
o
r
l
d
!

Vynecháme Ak tiež druhý parameter, je pre neho použitá defaultná hodnota dĺžky zavalitý 72 znakov.

Funkcia chunk_split() nie je multi-byte safe. Znaky s českou diakritikou nebudú teda správne rozdelené!

str_pad()

Funkcia str_pad() vyplní textový reťazec do nejakej novej určenej dĺžky. Nová dĺžka reťazca je nahradená ľubovoľnými znakmi alebo sústavou znakov (string). Funkcia str_pad() prijíma celkom štyri parametre, kde prvým z nich je náš textový reťazec. Druhým parametrom je nová dĺžka textového reťazca. Ak nová dĺžka bude menšia než dĺžka pôvodného reťazca, nebude aplikovaná žiadna zmena. Tretím parametrom je text, ktorý bude nahradzovaný opakovane do konca novej dĺžky textového reťazca. Posledným, štvrtým, parametrom je typ výplne. Môžeme rozhodnúť, či nový text v treťom parametri bude vyplňovať zľava, sprava alebo z oboch strán pôvodného textového reťazca.

Ukážme si prvý príklad:

$text = "Ota s Anetou byli v restauraci";
$str_pad = str_pad($text, 40);
print($str_pad);

V tomto príklade nám pôvodná textový reťazec zostal nezmenený, avšak zmenila sa jeho dĺžka. Defaultný hodnotou druhého parametra je znak medzery, reťazec má teraz dĺžku 40 doplnenú medzerami. Na stránke neuvidíme takmer žiadnu zmenu, avšak po otvorení zdrojového kódu v prehliadači sú tieto medzery viditeľné:

Funkce str_pad()
localhost

Ak nevynecháme tretí parameter, bude nami zvolený text vypisovaný zľava doprava opakovane až do konca novej dĺžky textového reťazca:

$text = "Ota s Anetou byli v restauraci";
$str_pad = str_pad($text, 40, ".:");
print($str_pad);

Na stránke bude viditeľná zmena:

Funkce str_pad()
localhost

Teraz pridáme štvrtý parameter, ktorým určíme, z akých strán bude nová dĺžka textového reťazca vyplňované:

$text = "Ota s Anetou byli v restauraci";
$str_pad = str_pad($text, 40, ".:", STR_PAD_LEFT);
print($str_pad);

Hodnota parametra STR_PAD_LEFT nám text z tretieho parametra opakovane vyplní z ľavej strany textového reťazca. Na stránke potom uvidíme:

Funkce str_pad()
localhost

Ak chceme mať text z tretieho parametra vyplnený z oboch strán, použijeme hodnotu štvrtého parametra STR_PAD_BOTH:

$text = "Ota s Anetou byli v restauraci";
$str_pad = str_pad($text, 40, ".:", STR_PAD_BOTH);
print($str_pad);

A text z tretieho parametra bude doplnený opakovane do novej dĺžky textového reťazca z oboch strán:

Funkce str_pad()
localhost

Funkcia str_pad() nie je multi-byte safe. Počítanie novej dĺžky textového reťazca a následne vypĺňanie textu z tretieho parametra je s českou diakritikou nesprávne.

V nasledujúcom kvíze, Kvíz - Textové reťazce, ich výpis a spájanie v PHP, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Rozdeľovanie a spájanie textových reťazcov
Všetky články v sekcii
PHP funkcie
Preskočiť článok
(neodporúčame)
Kvíz - Textové reťazce, ich výpis a spájanie 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