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:
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:
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:
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:
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.