September discount week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

Lekce 4 - Rozdělování a spojování textových řetězců - 2. díl

V předchozí lekci, Rozdělování a spojování textových řetězců, jsme si vysvětlili, jak rozdělovat a spojovat textové řetězce pomocí funkcí.

V dnešním díle si vyjmenujeme a detailně popíšeme další funkce pro rozdělování a spojování textových řetězců, které jsme si zatím neprobrali.

substr()

Nejčastěji používaná funkce v PHP pro vrácení části textového řetězce. Funkce substr() přijímá celkem 3 parametry, prvním z nich je náš textový řetězec, druhým parametrem funkce je číselná hodnota, od jaké pozice textový řetězec začíná. Posledním parametrem je délka vráceného textového řetězce. Ukažme si jednoduchý příklad této funkce:

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

Je vhodné zmínit, že znak á je tzv. multi-byte znak a je tedy brán jako dva znaky. Tak je to stejné například i s háčky, například znak č. Takových funkcí, které nepodporují tyto znaky, bude mnohem více. Probereme si je všechny v tomto kurzu.

Funkce substr() s hodnotou 16 druhého parametru start posouvá začátek našeho textového řetězce. Na stránce uvidíme část řetězce:

Funkce substr()
localhost

Dostaneme pouze text posunutý o 16 pozic zleva. Pokud však chceme posunout začátek textového řetězce zprava, využijeme záporných čísel hodnoty druhého parametru:

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

Začátek bude posunutý zprava o 8 znaků:

Funkce substr()
localhost

Pokud bude hodnota druhého parametru nulová:

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

funkce substr() vrátí celý textový řetězec:

Funkce substr()
localhost

Třetím parametrem definujeme délku našeho textového řetězce. Ukažme si příklad:

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

Hodnota 16 ve třetím parametru určuje novou délku textového řetězce. Druhý parametr s nulovou hodnotou zde nehraje žádnou roli:

Funkce substr()
localhost

Jak můžeme vidět, délka řetězce je opravdu 16 a začátek není nijak posunut. Zajímavější je, když druhý parametr nebude nulový:

$text = "Text pro ukázku funkce substr()";
$substr = substr($text, 5 , 16);
print($substr);
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Druhý parametr s hodnotou 5 se společně s limitací délky textového řetězce začne chovat jako posun zleva se zachováním zadané délky:

Funkce substr()
localhost

Začátek zleva je posunut o 5 pozic a zároveň celková délka řetězce je 16. Pro lepší pochopení si ukážeme tento problém graficky:

Pro podporu české diakritiky využijeme funkci s multi-byte podporou mb_substr(), kde posledním parametrem je typ kódování.

Dáme si tedy příklad této funkce s textem přesně o počtu 23 znaků:

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

Na stránce uvidíme bezchybně vypsaný řetězec:

Funkce mb_substr()
localhost

Bez podpory multi-byte znaků by text vypadal takto:

Funkce substr()
localhost

chunk_split()

Je funkce pro rozdělování znaků v textovém řetězci a nahrazování jiného znaku na místě rozdělení. Funkce přijímá celkem tři parametry, kde prvním z nich je náš textový řetězec. Druhým parametrem je délka kousku (tzv. chunk). Pomocí něho určíme, po jak dlouhých kousků textový řetězec bude dělený. Třetím parametrem je znak, který bude vypsán při každém dělení kousku, defaultní hodnotou je zalomení řádku \r\n. Ukažme si příklad na funkci chunk_split():

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

Náš textový řetězec bude rozdělen po jednotlivém znaku 1 a na místě rozdělení bude vypsána tečka .. Řetězec na stránce bude zobrazen takto:

Funkce chunk_split()
localhost

Řetězec můžeme také rozdělit po několika znacích, například u každého třetího znaku může být na místě rozdělení jakýkoliv znak nebo několik znaků, které nás napadnou:

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

Každý třetí znak 3 bude nahrazen symbolem kruhu °. Na stránce uvidíme:

Funkce chunk_split()
localhost

Pokud vynecháme poslední parametr a druhý parametr bude mít hodnotu 1, je každý znak zalomený na novou řádku:

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

Pokud bychom na našem prohlížeči zobrazili zdrojový kód stránky, uvidíme každý znak zalomený na novou řádku. Avšak na stránce uvidíme textový řetězec, kde každý znak je rozdělen mezerou:

Funkce chunk_split()
localhost

Můžeme si zkusit spustit skript přes příkazovou řádku. Nejprve si najdeme cestu k souboru .php a poté soubor spustíme příkazem php, např:

php C:\wamp\www\chunk_split.php

V konzoli se nám vypíše každý znak na nové řádce:

H
e
l
l
o

w
o
r
l
d
!

Vynecháme-li také druhý parametr, je pro něj použita defaultní hodnota délky chunku 72 znaků.

Funkce chunk_split() není multi-byte safe. Znaky s českou diakritikou nebudou tedy správně rozděleny!

str_pad()

Funkce str_pad() vyplní textový řetězec do nějaké nové určené délky. Nová délka řetězce je nahrazena libovolnými znaky nebo soustavou znaků (string). Funkce str_pad() přijímá celkem čtyři parametry, kde prvním z nich je náš textový řetězec. Druhým parametrem je nová délka textového řetězce. Pokud nová délka bude menší než délka původního řetězce, nebude aplikována žádná změna. Třetím parametrem je text, který bude nahrazován opakovaně do konce nové délky textového řetězce. Posledním, čtvrtým, parametrem je typ výplně. Můžeme rozhodnout, zda nový text ve třetím parametru bude vyplňován zleva, zprava nebo z obou stran původního textového řetězce.

Ukažme si první příklad:

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

V tomto příkladu nám původní textový řetězec zůstal nezměněn, avšak změnila se jeho délka. Defaultní hodnotou druhého parametru je znak mezery, řetězec má nyní délku 40 doplněnou mezerami. Na stránce neuvidíme téměř žádnou změnu, avšak po otevření zdrojového kódu v prohlížeči jsou tyto mezery viditelné:

Funkce str_pad()
localhost

Pokud nevynecháme třetí parametr, bude námi zvolený text vypisován zleva doprava opakovaně až do konce nové délky textového řetězce:

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

Na stránce bude viditelná změna:

Funkce str_pad()
localhost

Nyní přidáme čtvrtý parametr, kterým určíme, z jakých stran bude nová délka textového řetězce vyplňována:

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

Hodnota parametru STR_PAD_LEFT nám text z třetího parametru opakovaně vyplní z levé strany textového řetězce. Na stránce poté uvidíme:

Funkce str_pad()
localhost

Pokud chceme mít text z třetího parametru vyplněn z obou stran, použijeme hodnotu čtvrtého parametru 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 třetího parametru bude doplněn opakovaně do nové délky textového řetězce z obou stran:

Funkce str_pad()
localhost

Funkce str_pad() není multi-byte safe. Počítání nové délky textového řetězce a následně vyplňování textu z třetího parametru je s českou diakritikou nesprávné.

V další lekci, Nahrazování textových řetězců, se dozvíme, jak odstraňovat a konvertovat značky (tagy) v textových řetězcích pomocí funkcí PHP.


 

Předchozí článek
Rozdělování a spojování textových řetězců
Všechny články v sekci
PHP funkce
Článek pro vás napsal Pavel Vaněček
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!