Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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

V predchádzajúcej lekcii, PHP funkcie pre výpis textových reťazcov , sme si vysvetlili jednotlivé PHP funkcie pre výpis textových reťazcov, formátovanie textu a prácu s argumentmi.

V tejto lekcii kurze PHP funkcií si vymenujeme a detailne popíšeme funkcie pre rozdeľovanie a spájanie textových reťazcov, ktoré je dobré pre ich prácu poznať.

Rozdeľovanie a spájanie textových reťazcov

Ako je nám iste známe, s textovými reťazcami môžeme pracovať tak, ako sa nám zapáči. Doteraz sme textové reťazce len vypisovali, teraz si ale ukážeme príklady funkcií v PHP, ktoré sa zaslúži o rozdeľovanie a spájanie textových reťazcov.

explode()

Táto funkcia nám textový reťazec rozdelia do jednotlivých prvkov v poli pomocou nami vybraného rozdeľovacieho znaku, tzv. Delimiter. Príklad použitia funkcie explode():

$text = "Příklad funkce explode";
$rozdeleny_text = explode(" ",$text); // Rozdělujeme text pomocí mezery
print_r($rozdeleny_text);

Textový reťazec je rozdelený do troch prvkov poľa podľa oddeľovača " ", čo nám predstavuje medzeru. Teda pri každej medzere dôjde k rozdeleniu textového reťazca do prvkov v poli takto:

Array ( [0] => Příklad [1] => funkce [2] => explode )

Teraz použijeme úplne iný znak pre rozdeľovanie textového reťazca:

$text = "Její jméno bylo: Anna";
$rozdeleny_text = explode(":",$text); // Delimitér ':'
print_r($rozdeleny_text);

Textový reťazec je teda rozdelený pomocou delimiter : na dva prvky v poli:

Array ( [0] => Její jméno bylo [1] => Anna )

Môžeme si všimnúť, že dvojbodka (delimiter) nie je súčasťou poľa, tak ako delimiter medzier na príklade vyššie.

Vo funkcii explode() možno tiež limitovať počet prvkov v poli:

$text = "Toto je delší text";
$rozdeleny_text = explode(" ",$text, 2); // Limit počtu prvků v poli je nastaven na 2
print_r($rozdeleny_text);

Ak dosiahneme limitu počtu prvkov poľa, rozdeľovanie zvyšku reťazca sa nevykoná a zvyšok textu je vypísaný do posledného prvku v poli:

Array ( [0] => Toto [1] => je delší text )

Okrem limitu počtu prvkov v poli pomocou celých kladných čísel tu existuje variant od verzie PHP 5.1 limitovaní pomocou negatívnych (záporných) čísel:

$text = "Tento text bude uřízlý";
$rozdeleny_text = explode(" ",$text, -1); // Limit počtu prvků v poli zmenšený o 1
print_r($rozdeleny_text);

Limitováním pomocou záporných čísel text odrežeme, v našom prípade o jeden prvok. Prídeme teda o časť textového reťazca v závislosti na delení textu pomocou delimiter. Textový reťazec sa do prvkov poľa neuloží celý:

Array ( [0] => Tento [1] => text [2] => bude )

Ak sa budeme snažiť rozdeliť textový reťazec, v ktorom sa nebude nachádzať zadaný delimiter, bude celý text umiestnený do prvého prvku [0] v poli:

$text = "Tato věta nemá zadaný delimitér";
$rozdeleny_text = explode(",",$text); // Delimitér ','
print_r($rozdeleny_text);

Prvok poľa bude teda iba jeden:

Array ( [0] => Tato věta nemá zadaný delimitér )

implode()

Je vlastne opačnú funkciou k funkcii explode(). Časti textu sú zapísané ako hodnoty v jednotlivých prvkov polia a sú spájané pomocou špeciálnych znakov, tzv. Lepidlá (glue).

Tu si spojíme textové prvky poľa pomocou znaku ,:

$textove_pole = array('jablka', 'hrušky', 'švestky');
$spojeny_text = implode(",", $textove_pole); // Spojení prvků pole pomocí znaku ','
echo ($spojeny_text);

Na stránke uvidíme:

Funkce implode()
localhost

Ak si pomenujeme kľúče prvkov poľa, text bude spojený bez ohľadu na názov kľúčov:

$textove_pole = array('prvni' => 'kniha', 'auto', 'treti' => 'počítač');
$spojeny_text = implode(',', $textove_pole);
echo ($spojeny_text);

Výsledkom bude:

Funkce implode()
localhost

Viac praktické použitie funkcie implode() si môžeme ukázať, ak chceme napríklad zostaviť list pomocou HTML znakov:

$cisla = array('1', '2', '3', '4', '5');
echo "<ul><li>" .implode("</li><li>", $cisla). "</li></ul>";

Pomocou zlučovanie textových reťazcov na stránke uvidíme:

Funkce implode()
localhost

Ak sa budeme snažiť spájať prázdne pole, výsledkom bude prázdny reťazec.

join()

Je aliasom funkcia implode() a vlastne robí to isté:

$textove_pole = array( 'prvni' => 'telefon', 'tablet', 'treti' => 'klávesnice' );
$spojeny_text = join(',', $textove_pole);
echo ($spojeny_text);

Výstupom je:

Funkce implode()
localhost

Avšak z dôvodu prehľadnosti a pôsobivosti kódu programátori používajú funkciu implode() s jej opačnou funkciou explode(). Na druhú stranu, funkciu join() nájdeme vo väčšine programovacích jazykov. Je teda známejší.

str_split()

Je funkcia, ktorá rozdelí textový reťazec na jednotlivé textové úseky podľa zadanej dĺžky úseku. Defaultný hodnotou je dĺžka úseku 1, teda textový reťazec bude rozdelený na jednotlivé znaky a každý znak bude predstavovať hodnotu prvku v poli:

$text = "Ahoj";
print_r(str_split($text)); // Rozdělení textového řetězce do prvků pole po znacích

Výsledkom je pole o štyroch prvkoch:

Array ( [0] => A [1] => h [2] => o [3] => j )

Teraz nastavíme maximálnu dĺžku úseku, ktorú by mal mať každý prvok v poli:

$text = "Ahoj";
print_r(str_split($text, 3)); // Rozdělení textového řetězce do prvků pole po 3 znacích

Hodnoty prvkov v poli budú vyzerať takto:

Array ( [0] => Aho [1] => j )

Ako môžeme vidieť, dĺžku troch znakov v prvku poli spĺňa iba prvok na indexe 0. Jedná sa teda o maximálnu dĺžku úseku v prvku poľa, kde na indexe 1 nájdeme iba jeden znak.

Pokiaľ do funkcie str_split() vložíme viacbajtový reťazec, napríklad s diakritikou, je rozdelený na jednotlivé bajty. Táto funkcia totiž nie je tzv. Multibyte safe a niektoré znaky nemusia byť správne zobrazené!

Príkladom môže byť text, ktorý obsahuje znaky s diakritikou:

$text = "sloní";
print_r(str_split($text));

Posledný znak í v slove sloní je tzv. Viac-bajtové (multibyte) a zaberie viac ako 2 bajty. Ak by sme použili funkciu strlen(), ktorú si vysvetlíme neskôr, dostaneme nesprávnu dĺžku textového reťazca 6. Text je tak nesprávne rozdelený ak tomu tam sú nezmyselné znaky:

Array ( [0] => s [1] => l [2] => o [3] => n [4] => � [5] => � )

V ďalšej lekcii, Rozdeľovanie a spájanie textových reťazcov - 2. diel , sa dozvieme, ako nahrádzať, meniť znaky alebo celé úseky textových reťazcov.


 

Predchádzajúci článok
PHP funkcie pre výpis textových reťazcov
Všetky články v sekcii
PHP funkcie
Preskočiť článok
(neodporúčame)
Rozdeľovanie a spájanie textových reťazcov - 2. diel
Č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