5. diel - Nahradzovanie textových reťazcov
V minulej lekcii, Rozdeľovanie a spájanie textových reťazcov - 2. diel , sme sa dozvedeli, ako nahrádzať, meniť znaky alebo celé úseky textových reťazcov.
V tejto lekcii kurze PHP funkcií si vymenujeme a detailne popíšeme funkcie pre nahrádzanie textových reťazcov príslušnými znaky a alebo svojím textom.
Nahradzovanie textových reťazcov
Určite sme sa niekedy ocitli v situácii, keď sme nejakým jednoduchým spôsobom potrebovali nahradiť nejaké slovo vo veľmi dlhom texte. Ak vynechám textové editory a ich funkcie vyhľadanie a nahradenie slov, existuje v PHP súbor funkcií pre nahrádzanie textových reťazcov, ktorý pri správnom použití túto problematiku dokáže vyriešiť za nás.
str_replace()
Táto funkcia nájde hľadané znaky a nahradiť inými znakmi v textovom
reťazci alebo tiež v poli. Funkcia str_replace()
je tzv.
Case-sensitive, čo znamená, že sa rozlišujú veľké a
malé písmená. Ukážme si príklad:
$text = "Včera jsem měl hlad, hlad na sladké"; $nahrazeni = str_replace("hlad", "chuť", $text); print($nahrazeni);
Prvým parametrom hľadáme v texte všetky slová "hlad"
.
Druhým parametrom nahrádzame hľadané slovo slovom "chuť"
.
Tretím parametrom je náš textový reťazec $text
, v ktorom
nahrádzame uvedenej znaky. Na stránke uvidíme:
Sami si asi nevšimneme, že funkcia str_replace()
je tzv.
Binary-safe. To znamená, že textový reťazec môže
obsahovať diakritiku a tiež znaky Unicode. Môžeme nahrádzať napríklad
emoji:
$emoji = "☺☻♥☺♦"; $nahrazeni = str_replace("☺", "♣", $emoji); print($nahrazeni);
Znak smajlíka nahradíme znakom trojlístka:
Môžeme tiež nahrádzať znaky alebo text v poliach:
$pole = array("Router", "Switch", "HUB", "Tiskárna"); $nahrazeni = str_replace("Tiskárna", "Print server", $pole, $i); print_r($nahrazeni); // Zobrazení pole nahrazeného o příslušné znaky print("<br>Nahrazení proběhlo: ".$i); // Výpis počítadla nahrazení slov
Vytvoríme si textové pole tak, ako u bežného textového reťazca dôjde
so správnym použitím funkcie str_replace()
na nahradenie znakov.
Tu sa nám objaví možnosť využiť štvrtý parameter, ktorý nám
zistí počet nahradených slov. Výsledkom je výpis nahradeného
textového poľa s počtom nahradenie:
Ak chceme nahrádzať znaky alebo text bez závislosti na
veľkých a malých písmenách, využijeme funkciu str_ireplace()
,
ktorá funguje rovnako, ale je case-insensivite.
Veľmi jednoduchým príkladom str_ireplace()
funkcia môže
byť:
$text = "Rybíz mám rád, rybíz rád jím."; $nahrazeni = str_ireplace("rybíz", "maliny", $text); print($nahrazeni);
Na rozdiel od funkcie str_replace()
dôjde k nahradeniu znakov
bez závislosti na veľkých a malých písmenách:
substr_replace()
Funkcia substr_replace()
nahrádza znaky alebo časti textu
inými. Funkcia prijíma parametre textového reťazca, text k nahradeniu,
začiatok nahrádzania a dĺžku. Vyzerá teda takto:
substr_replace(string, replacement, start, length);
. Pre začiatok
si uvedieme jednoduchý príklad:
$text = "Java"; $nahrazeni = substr_replace($text, "PHP", 0); // Nahrazení textu od začátku print($nahrazeni);
V premennej $text
je uložený text "Java", tu pomocou funkcie
substr_replace()
nahradíme tento text za text "PHP" od začiatku.
Začiatok nám určuje hodnota 0
ako tretí parameter. To znamená,
že text bude nahradený zľava až do konca. V tomto príklade je text
nahradený celý bez ohľadu na dĺžke znakov:
Ak chceme nahradiť celý text okrem prvého znaku v pôvodnom textovom
reťazci $text
, vykonáme to nasledovne:
$text = "Java"; $nahrazeni = substr_replace($text, "PHP", 1); // Nahrazení textu zleva s posunutým začátkem print($nahrazeni);
Textový reťazec sa začne nahradzovať až od druhého znaku, pretože je začiatok nahrádzanie textu posunutý:
Môže nastať situácia, kedy budeme chcieť text nahrádzať sprava pôvodného textového reťazca. Tu využijeme záporných čísel, ktoré nám reťazec budú nahrádzať textom sprava:
$text = "Java"; $nahrazeni = substr_replace($text, "PHP", -1); // Nahrazení textu zprava s posunutým začátkem print($nahrazeni);
Dôjde tak k nahradeniu textového reťazca "Java"
textom
"PHP"
sprava as posunutým začiatkom o jeden znak:
Ak chceme náš text "PHP"
presunúť na začiatok pôvodného
textového reťazca, využijeme parameter dĺžky
(length
):
$text = "Java"; $nahrazeni = substr_replace($text, "PHP", 0, 0); // Posunutí textu "PHP" na začátek řetězce print($nahrazeni);
Predposledný parameter začiatku (štart) s hodnotou
0
nám hovorí, že nahrádzanie reťazca začína zľava, ale
posledný parameter dĺžky (length
) s hodnotou
0
nám hovorí, že text chceme posúvať. Konečný výsledok na
stránke je teda text "PHP"
posunutý na začiatku textového
reťazca "Java"
:
Kladné čísla posledného parametra funkcie substr_replace()
nám udávajú, aká dĺžka textového reťazca má byť nahradená. Záporné
čísla zase určujú, koľko znakov by malo z pôvodného reťazca zostať.
Príkladom môže byť polia textových reťazcov:
$pole = array("111", "111", "111"); $nahrazeni = substr_replace($pole, "222", 0,3); print_r($nahrazeni);
Všetky textové reťazce 111
v poli budú nahradené textovým
reťazcom 222
od začiatku 0
s dĺžkou nahrádzania
3
znakov. Výstupom na stránku bude:
Ak posledný parameter funkcie substr_replace()
bude záporný,
určujeme, aká bude dĺžka pôvodného textového reťazca sprava:
$text = "Mám rád housky"; $nahrazeni = substr_replace($text, "_", 0, -6); print_r($nahrazeni);
Tu nahrádzame pôvodné textový reťazec podčiarknikom "_"
,
ktoré bude zobrazené hneď na začiatku nového reťazca. Zvyšok pôvodného
textového reťazca bude zmazaný, ale podľa posledného parametra s hodnotou
-6
zostane len tá časť reťazca, ktorá je dlhá 6
znakov sprava.
V prípade diakritiky, napríklad v texte
Mám rád houský
, zostane iba posledných 5 znakov
sprava. Znak ý
je totiž braný ako dvojznak
(multi-byte).
Výsledkom je:
Ako môžeme vidieť, zvyšok reťazca "Mám rád "
bol
vypustený a bol nahradený podčiarknikom. Z pôvodného reťazca zostal iba
text "housky"
dlhý presne 6 znakov.
strtr()
Táto funkcia nám prekladá určité znaky do nášho textového reťazca.
Ak chceme v našom textovom reťazci nahradiť napríklad všetky znaky
a
za znaky b
, funkcia strtr()
tento
problém vyrieši za nás. Uveďme si jednoduchý príklad nahrádzania jedného
znaku za iný:
$text = "Hhoj světe"; $nahrazeni = strtr($text, "H", "A"); print($nahrazeni);
V textovom reťazci "Hhoj světe"
je znak H
nahradený za znak A
:
Vznikne tak nový reťazec "Ahoj světe"
. Oveľa zaujímavejšie
je, keď chceme nahradiť znakov hneď niekoľko. Ukážme si príklad:
$text = "Alry! Yak te dnot mčš?"; $nahrazeni = strtr($text, "lryYtoč", "hojJseá"); print($nahrazeni);
Môžeme tu vidieť sprvu nezmyselnú vetu
"Alry! Yak te dnot mčš?"
, Ktorá bude ďalej pomocou nástroja
strtr()
nahradená o správnej znaky. Druhý parameter tejto
funkcie sú znaky, ktoré majú byť v texte nahradené. Tretí parametrom sú
znaky ktoré budú nahradené vo vete miesto hľadaných znakov v druhom
parametri.
Môže to byť zložité na pochopenie, ale v skutočnosti je to veľmi
jednoduché. Napríklad znak l
v druhom parametra funkcie bude
nájdený v našej vete a každý tento znak bude nahradený znakom
h
v treťom parametri funkcie. Oba tieto znaky sa nachádzajú na
prvej pozícii v parametri, ďalšie znaky budú nahradené rovnakým
spôsobom:
- l => h
- r => o
- y => j
- Y => J
- t => s
- o => e
- č => á
Po nahradenie všetkých príslušných znakov na stránke uvidíme zmysluplnú vetu:
Pravdepodobne túto funkciu budeme chcieť využiť aj v textových poliach. Polia v tejto funkcii slúži ako súbor prekladov, respektíve návod, aký znak alebo súbor znakov má byť vyhľadaný a následne aký znak alebo súbor znakov má byť namiesto neho nahradený. napríklad:
$preklad = array("není" => "je", "kulatá" => "placatá"); $nahrazeni = strtr("Země není kulatá!", $preklad); print($nahrazeni);
Vysvetlíme si tento problém na vete "Země není kulatá!"
.
Premenná $preklad
obsahuje súbor kľúčov a hodnôt poľa, v
tomto prípade kľúč napríklad "není"
je vo vete vyhľadaný a
následne ich za neho nahradená hodnota, ktorá sa schovávala pod týmto
kľúčom, text "je"
. Ďalší súbor kľúče a hodnoty je
vyhľadaný a nahradený vo vete rovnakým spôsobom:
Funkcia strtr()
má v skutočnosti 2 modely,
kde 1. z nich prijíma 3 parametre a 2. iba 2 parametre. Teraz si ukážeme,
aký je medzi nimi rozdiel:
print (strtr("2ff2", "2f", "01")); // 1. model $preklad = array("2f" => "01"); print (strtr("2ff2", $preklad)); // 2. model
1. model nám hovorí, že namiesto znaku 2
bude v texte nahradená 0
a miesto znaku f
zase
1
. Bude tu teda celý text nahradený za jednotky a nuly.
2. model, ktorý sme si vysvetľovali naposledy, vyhľadá a
nahradzuje celé textové reťazce. Hľadáme tu textový reťazec
2f
a ak bude v texte nájdený, bude nahradený za reťazec
01
. Text, ktorý nezodpovedá vyhľadávanie, nebude nahradený a
bude zachovaný.
Funkcia strtr()
je case-sensitive.
Ak nechceme rozlišovať veľké a malé písmená, je najlepšie použiť
vyššie zmienenú case-insensitive funkciu
str_ireplace()
.
V ďalšej lekcii, Tagy v textovom reťazci , sa dozvieme, ako zistiť vlastnosti textových reťazcov a odstrániť prebytočné medzery pomocou funkcií v PHP.