8. diel - Opakovanie textových reťazcov v PHP
V predchádzajúcej lekcii, Vlastnosti textových reťazcov a práce s medzerami , sme si ukázali, ako zistiť vlastnosti textových reťazcov a ako pracovať s medzerami pomocou funkcií v PHP.
V tejto lekcii kurze PHP funkcií si vymenujeme a detailne popíšeme funkcie pre opakovanie znakov alebo častí textových reťazcov.
str_repeat()
Funkcia str_repeat()
opakuje znaky alebo textové reťazce,
koľkokrát len chceme. Funkcia str_repeat()
prijíma dva
parametre. Prvým je náš textový reťazec,
druhým parametrom je počet opakovaní tohto reťazca.
Ukážme si príklad tejto funkcie:
$text = "Yay!"; $str_repeat = str_repeat($text, 10); print($str_repeat);
Funkcia str_repeat()
bude opakovať náš textový reťazec
"Yay!"
. Dostaneme teda nový textový reťazec, kde sa náš
reťazec bude vyskytovať presne 10 krát za sebou zoradený zľava doprava:
Funkcia je multi-byte safe, teda sa nemusíme obávať použitie znakov s diakritikou.
Druhý parameter je vyžadovaný (anglicky required), teda ho nemožno vynechať. Pokiaľ tento parameter bude nulový, dostaneme prázdny reťazec.
str_shuffle()
str_shuffle()
je funkcia, ktorá náhodne zamieša znaky medzi
sebou v zadanom textovom reťazci. Prijíma iba jeden
parameter, ktorým je náš reťazec. Jednoduchým príkladom teda
môže byť:
$text = "Hello"; $str_shuffle = str_shuffle($text); print($str_shuffle);
Nie je náhodou, akým spôsobom funkcia str_shuffle()
znaky
mieša. Všetko je ovplyvnené randomizačním algoritmom, ktorý sa od verzie
PHP 7.1 zmenil na generátor náhodných čísel Mersenne
Twister, bol teda náhradou za pomalší náhodne priradený algoritmy
rand()
a srand()
.
Funkcia str_shuffle()
nám vráti zakaždým iný výsledok
náhodne prohozených znakov v našom textovom reťazci, príkladom môže
byť:
Dôvod, prečo je zakaždým textový reťazec zamiešaný iným spôsobom,
je nešpecifikovanú tzv. Semienka (seed). Miešanie znakov v
textovom reťazci možno teda riadiť pridaním napríklad randomizačního
algoritmu srand()
, do ktorého prvého parametra
seed zapíšeme 5
:
srand(5); $text = "Hello"; $str_shuffle = str_shuffle($text); print($str_shuffle);
Seed sme tu nastavili pomocou srand()
na hodnotu 5
,
teda pre funkciu str_shuffle()
bude použitý stále ten rovnaký
spôsob miešania znakov v závislosti od hodnoty seedu. Výsledkom potom
bude:
Semienko (seed) je náhodné číslo (alebo pole), ktoré sa používa pri začatí generátora náhodných čísel. Generátor teda pri použití iného semienka vracia inú sekvenciu dát.
Takéto semienko môžete poznať pri náhodne generovaných máp, často napríklad v hre Minecraft, kde môžete vygenerovať úplne rovnaký svet koľkokrát chcete.
Funkcia str_shuffle()
nie je multi-byte
safe. Použitím diakritiky funkcie vracia nesprávne hodnoty!
strrev()
Funkcia, ktorá vráti prevrátený textový reťazec nášho pôvodného
reťazca. Funkcia strrev()
za parameter prijíma iba náš textový
reťazec. Uvedieme si príklad:
$text = "Natrhali jsme jablka"; $strrev = strrev($text); print($strrev);
Funkcia teda prevráti pôvodnej reťazec "natrhala sme jablka" a vráti ho otočený:
Funkcia strrev()
nie je multi-byte
safe. Znaky obsahujúce diakritiku nebudú správne prevrátené!
str_rot13()
str_rot13()
je funkcia, ktorá v zadanom textovom reťazci
zamieša znaky, ale nie medzi sebou ani náhodne. Každý znak v textovom
reťazci je posunutý o 13 miest v abecede. Textový reťazec
teda možno zakódovať, ale aj dekódovať. Funkcia prijíma jeden parameter,
ktorým je textový reťazec. Ukážme si príklad:
$text = "Adam byl venku"; $str_rot13 = str_rot13($text); print($str_rot13);
Každý znak teda bude posunutý o 13 miest v abecede, výsledný reťazec je:
Avšak ak túto funkciu použijeme znovu na náš zakódovaný reťazec, funkcia text dekóduje a my tak dostaneme späť náš pôvodný textový reťazec:
$text = "Adam byl venku"; $str_rot13 = str_rot13($text); print($str_rot13 . "<br>"); $str_rot13_decode = str_rot13($str_rot13); print($str_rot13_decode);
Na stránke potom uvidíme ako zakódovaný, tak dekódovaný textový reťazec:
Čísla alebo špeciálne znaky v textovom reťazci nebudú prehodené!
$text = "Venku je 25°C"; $str_rot13 = str_rot13($text); print($str_rot13);
V reťazci sa vyskytujú ako čísla, tak špeciálny znak stupňa
°
. Výsledkom na stránke bude textový reťazec:
Ako to, že funkcia str_rot13()
náš text zakóduje a rovnakou
funkciou dekóduje? Je to jednoduché, anglická abeceda má dokopy 26 písmen,
čiže polovica je 13 znakov. Keď teda vyberieme písmeno A
,
posunieme ho o 13 miest v abecede, dostaneme písmeno N
. Keď tento
proces zopakujeme, dostaneme sa znova na písmeno A
hneď po
písmene Z
. Toto je tiež dôvod, prečo funkcia nepodporuje
diakritiku a ďalšie špeciálne znaky (nie je multi-byte safe).
V ďalšej lekcii, Malé a veľké písmená v textovom reťazci , si ukážeme, ako v textových reťazcoch meniť veľkosť písmen.