Lekce 8 - Opakování textových řetězců v PHP
V předchozí lekci, Vlastnosti textových řetězců a práce s mezerami, jsme si ukázali, jak zjistit vlastnosti textových řetězců a jak pracovat s mezerami pomocí funkcí v PHP.
V této lekci kurzu PHP funkcí si vyjmenujeme a detailně popíšeme funkce pro opakování znaků nebo částí textových řetězců.
str_repeat()
Funkce str_repeat()
opakuje znaky nebo textové řetězce,
kolikrát jen chceme. Funkce str_repeat()
přijímá dva
parametry. Prvním je náš textový řetězec,
druhým parametrem je počet opakování tohoto řetězce.
Ukažme si příklad této funkce:
$text = "Yay!"; $str_repeat = str_repeat($text, 10); print($str_repeat);
Funkce str_repeat()
bude opakovat náš textový řetězec
"Yay!"
. Dostaneme tedy nový textový řetězec, kde se náš
řetězec bude vyskytovat přesně 10 krát za sebou seřazený zleva
doprava:
Funkce je multi-byte safe, tudíž se nemusíme obávat použití znaků s diakritikou.
Druhý parametr je vyžadován (anglicky required), tudíž jej nelze vynechat. Pokud tento parametr bude nulový, dostaneme prázdný řetězec.
str_shuffle()
str_shuffle()
je funkce, která náhodně zamíchá znaky mezi
sebou v zadaném textovém řetězci. Přijímá pouze jeden
parametr, kterým je náš řetězec. Jednoduchým příkladem tedy
může být:
$text = "Hello"; $str_shuffle = str_shuffle($text); print($str_shuffle);
Není náhodou, jakým způsobem funkce str_shuffle()
znaky
míchá. Vše je ovlivněno randomizačním algoritmem, který se od verze
PHP 7.1 změnil na generátor náhodných čísel Mersenne
Twister, byl tedy náhradou za pomalejší randomizační algoritmy
rand()
a srand()
.
Funkce str_shuffle()
nám vrátí pokaždé jiný výsledek
náhodně prohozených znaků v našem textovém řetězci, příkladem může
být:
Důvod, proč je pokaždé textový řetězec zamíchán jiným způsobem, je
nespecifikování tzv. semínka (seed). Míchání znaků v
textovém řetězci lze tedy řídit přidáním například randomizačního
algoritmu srand()
, do jehož prvního parametru
seed zapíšeme 5
:
srand(5); $text = "Hello"; $str_shuffle = str_shuffle($text); print($str_shuffle);
Seed jsme zde nastavili pomocí srand()
na hodnotu
5
, tudíž pro funkci str_shuffle()
bude použit
stále ten stejný způsob míchání znaků v závislosti na hodnotě seedu.
Výsledkem poté bude:
Semínko (seed) je náhodné číslo (nebo pole), které se používá při zahájení generátoru náhodných čísel. Generátor tedy při použití jiného semínka vrací jinou sekvenci dat.
Takové semínko můžete znát při náhodně generovaných map, často například ve hře Minecraft, kde můžete vygenerovat úplně stejný svět kolikrát chcete.
Funkce str_shuffle()
není multi-byte
safe. Použitím diakritiky funkce vrací nesprávné hodnoty!
strrev()
Funkce, která vrátí převrácený textový řetězec našeho původního
řetězce. Funkce strrev()
za parametr přijímá pouze náš
textový řetězec. Uvedeme si příklad:
$text = "Natrhali jsme jablka"; $strrev = strrev($text); print($strrev);
Funkce tedy převrátí původní řetězec "Natrhali jsme jablka" a vrátí jej otočený:
Funkce strrev()
není multi-byte
safe. Znaky obsahující diakritiku nebudou správně
převrácené!
str_rot13()
str_rot13()
je funkce, která v zadaném textovém řetězci
zamíchá znaky, avšak nikoliv mezi sebou ani náhodně. Každý znak v
textovém řetězci je posunut o 13 míst v abecedě. Textový
řetězec tedy lze zakódovat, ale i dekódovat. Funkce přijímá jeden
parametr, kterým je textový řetězec. Ukažme si příklad:
$text = "Adam byl venku"; $str_rot13 = str_rot13($text); print($str_rot13);
Každý znak tedy bude posunut o 13 míst v abecedě, výsledný řetězec je:
Avšak pokud tuto funkci použijeme znovu na náš zakódovaný řetězec, funkce text dekóduje a my tak dostaneme zpět náš původní textový řetězec:
$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ánce poté uvidíme jak zakódovaný, tak dekódovaný textový řetězec:
Čísla nebo speciální znaky v textovém řetězci nebudou přehozeny!
$text = "Venku je 25°C"; $str_rot13 = str_rot13($text); print($str_rot13);
V řetězci se vyskytují jak čísla, tak speciální znak stupně
°
. Výsledkem na stránce bude textový řetězec:
Jak to, že funkce str_rot13()
náš text zakóduje a stejnou
funkcí dekóduje? Je to jednoduché, anglická abeceda má dohromady 26
písmen, čili polovina je 13 znaků. Když tedy vybereme písmeno
A
, posuneme ho o 13 míst v abecedě, dostaneme písmeno
N
. Když tento proces zopakujeme, dostaneme se znova na písmeno
A
hned po písmenu Z
. Toto je také důvod, proč
funkce nepodporuje diakritiku a další speciální znaky (není multi-byte
safe).
V další lekci, Malá a velká písmena v textovém řetězci, si ukážeme, jak v textových řetězcích měnit velikost písmen.