IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 str_repeat()
localhost

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:

Funkce str_shuffle()
localhost

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:

Funkce str_shuffle()
localhost

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()
localhost

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:

Funkce str_rot13()
localhost

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:

Funkce str_rot13()
localhost

Čí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:

Funkce str_rot13()
localhost

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.


 

Předchozí článek
Vlastnosti textových řetězců a práce s mezerami
Všechny články v sekci
PHP funkce
Přeskočit článek
(nedoporučujeme)
Malá a velká písmena v textovém řetězci
Článek pro vás napsal Pavel Vaněček
Avatar
Uživatelské hodnocení:
6 hlasů
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity