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 3 - Rozdělování a spojování textových řetězců

V předchozí lekci, PHP funkce pro výpis textových řetězců, jsme si vysvětlili jednotlivé PHP funkce pro výpis textových řetězců, formátování textu a práci s argumenty.

V této lekci kurzu PHP funkcí si vyjmenujeme a detailně popíšeme funkce pro rozdělování a spojování textových řetězců, které je dobré pro jejich práci znát.

Rozdělování a spojování textových řetězců

Jak je nám jistě známo, s textovými řetězci můžeme pracovat tak, jak se nám zlíbí. Doposud jsme textové řetězce jen vypisovali, nyní si ale ukážeme příklady funkcí v PHP, které se zaslouží o rozdělování a spojování textových řetězců.

explode()

Tato funkce nám textový řetězec rozdělí do jednotlivých prvků v poli pomocí námi vybraného rozdělovacího znaku, tzv. delimitéru. Příklad použití funkce explode():

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

Textový řetězec je rozdělen do tří prvků pole podle oddělovače " ", což nám představuje mezeru. Tedy při každé mezeře dojde k rozdělení textového řetězce do prvků v poli takto:

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

Nyní použijeme zcela jiný znak pro rozdělování textového řetězce:

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

Textový řetězec je tedy rozdělen pomocí delimitéru : na dva prvky v poli:

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

Můžeme si všimnout, že dvojtečka (delimitér) není součástí pole, tak jako delimiter mezer na příkladu výše.

Ve funkci explode() lze také limitovat počet prvků 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);

Pokud dosáhneme limitu počtu prvků pole, rozdělování zbytku řetězce se neprovede a zbytek textu je vypsán do posledního prvku v poli:

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

Kromě limitu počtu prvků v poli pomocí celých kladných čísel zde existuje varianta od verze PHP 5.1 limitování pomocí negativních (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);
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Limitováním pomocí záporných čísel text uřízneme, v našem případě o jeden prvek. Přijdeme tedy o část textového řetězce v závislosti na dělení textu pomocí delimitéru. Textový řetězec se do prvků pole neuloží celý:

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

Pokud se budeme snažit rozdělit textový řetězec, ve kterém se nebude nacházet zadaný delimitér, bude celý text umístěný do prvního prvku [0] v poli:

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

Prvek pole bude tedy pouze jeden:

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

implode()

Je vlastně opačnou funkcí k funkci explode(). Části textu jsou zapsány jako hodnoty v jednotlivých prvků pole a jsou spojovány pomocí speciálních znaků, tzv. lepidla (glue).

Zde si spojíme textové prvky pole pomocí znaku ,:

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

Na stránce uvidíme:

Funkce implode()
localhost

Jestliže si pojmenujeme klíče prvků pole, text bude spojen bez ohledu na název klíčů:

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

Výsledkem bude:

Funkce implode()
localhost

Více praktické použití funkce implode() si můžeme ukázat, pokud chceme například sestavit list pomocí HTML znaků:

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

Pomocí slučování textových řetězců na stránce uvidíme:

Funkce implode()
localhost

Pokud se budeme snažit spojovat prázdné pole, výsledkem bude prázdný řetězec.

join()

Je aliasem funkce implode() a vlastně dělá to samé:

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

Výstupem je:

Funkce implode()
localhost

Avšak z důvodu přehlednosti a působivosti kódu programátoři používají funkci implode() s její opačnou funkcí explode(). Na druhou stranu, funkci join() najdeme ve většině programovacích jazyků. Je tedy známější.

str_split()

Je funkce, která rozdělí textový řetězec na jednotlivé textové úseky podle zadané délky úseku. Defaultní hodnotou je délka úseku 1, tedy textový řetězec bude rozdělen na jednotlivé znaky a každý znak bude představovat hodnotu prvku v poli:

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

Výsledkem je pole o čtyřech prvcích:

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

Nyní nastavíme maximální délku úseku, kterou by měl mít každý prvek v poli:

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

Hodnoty prvků v poli budou vypadat takto:

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

Jak můžeme vidět, délku tří znaků v prvku poli splňuje pouze prvek na indexu 0. Jedná se tedy o maximální délku úseku v prvku pole, kde na indexu 1 nalezneme pouze jeden znak.

Pokud do funkce str_split() vložíme vícebajtový řetězec, například s diakritikou, je rozdělen na jednotlivé bajty. Tato funkce totiž není tzv. Multibyte safe a některé znaky nemusí být správně zobrazeny!

Příkladem může být text, který obsahuje znaky s diakritikou:

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

Poslední znak í ve slově sloní je tzv. více-bajtový (multibyte) a zabere více jak 2 bajty. Pokud bychom použili funkci strlen(), kterou si vysvětlíme později, dostaneme nesprávnou délku textového řetězce 6. Text je tak nesprávně rozdělen a k tomu tam jsou nesmyslné znaky:

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

V další lekci, Rozdělování a spojování textových řetězců - 2. díl, se dozvíme, jak nahrazovat, měnit znaky nebo celé úseky textových řetězců.


 

Předchozí článek
PHP funkce pro výpis 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 (5)

 

 

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í!