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:
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:
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:
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:
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:
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:
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:
Bez podpory multi-byte znakov by text vyzeral takto:
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:
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:
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:
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é:
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:
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:
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:
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í.