IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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:

Funkce str_replace()
localhost

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:

Funkce str_replace()
localhost

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:

Funkce str_replace()
localhost

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:

Funkce str_ireplace()
localhost

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:

Funkce substr_replace()
localhost

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

Funkce substr_replace()
localhost

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:

Funkce substr_replace()
localhost

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

Funkce substr_replace()
localhost

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:

Funkce substr_replace()
localhost

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:

Funkce substr_replace()
localhost

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:

Funkce strtr()
localhost

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:

Funkce strtr()
localhost

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:

Funkce strtr()
localhost

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.

Funkce strtr()
localhost

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

Funkce strtr()
localhost

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.


 

Predchádzajúci článok
Rozdeľovanie a spájanie textových reťazcov - 2. diel
Všetky články v sekcii
PHP funkcie
Preskočiť článok
(neodporúčame)
Tagy v textovom reťazci
Článok pre vás napísal Pavel Vaněček
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity