A PHP str_replace funkciója

Egy programozó eszköztárában fontos elem az a tudás is, amelynek segítségével a PHP-string részeit új értékekre cserélhetjük. A str_replace funkció hasonlóan működik, mint a szövegszerkesztők „Replace All” parancsa, mely lehetővé teszi, hogy megadjuk a szót, melyet le szeretnénk cserélni, valamint azt a szót, amelyikre cserélni szeretnénk, majd elvégzi a szócserét az egész dokumentumot átfésülve.

A str_replace paraméterei

A str_replace funkciónak három paramétere van, ezek feltétlenül szükségesek ahhoz, hogy a funkció megfelelően működjön. A funkció így fest:

str_replace(search, replace, original_string)

1. search — Ez az, amire rákeresünk a stringben. Ez lehet egy string vagy egy tömb is.

2. replace — Minden találat a searchre ezzel az értékkel lesz helyettesítve. Ez lehet egy string vagy egy tömb is.

3. original_string — Ezen belül fog működni a search/replace. A str_replace funkció az original_string módosított változatát eredményezi, miután lefut.

Egy egyszerű példa a str_replace funkcióra

Képzeljük el, hogy egy iskolának dolgozunk, és egy olyan weboldalt kell létrehoznunk, amely a diákok szüleinek szól. A weboldalnak van egy bemutatkozó stringje, melyet testre szabunk aszerint, hogy a diák fiú-e vagy lány. A str_replace funkcióval ez nagyon egyszerű.

PHP-kód:

// a string amit testre kell szabni
$rawstring = 'Üdvözöljük a szülőket. Az Önök replaceme iskolánk tanulója!';

// fiú string
$malestr = str_replace('replaceme', 'fia', $rawstring);

// lány string
$femalestr = str_replace('replaceme', 'lánya', $rawstring);

echo 'Fiú: ' . $malestr . '<br />';
echo 'Lány: ' . $femalestr;

Megjelenítés a böngészőben:

Fiú: Üdvözöljük a szülőket. Az Önök fia iskolánk tanulója!

Lány: Üdvözöljük a szülőket. Az Önök lánya iskolánk tanulója!

Ennek a két, nemre szabott stringnek köszönhetően sokkal jobb felhasználói élményt tudunk nyújtani a diákok szüleinek, amikor bejelentkeznek az iskola weboldalára a gyerekek adataival.

str_replace arrays: több csere egyszerre

Előző példánkban csak egy szót cseréltünk le a stringünkben (replaceme), de mi a teendő akkor, ha több szót szeretnénk lecserélni? Használhatjuk többször egymás után a funkciót, vagy létrehozhatunk egy olyan helyőrző tömböt (placeholder array) és egy második tömböt, amely azokból az értékekből áll, amelyekre cserélni szeretnénk az eredeti értékeket. Ezzel a második megoldással egyszerre tudjuk lecserélni az összes szót.

Kulcsfontosságú, hogy megértsd, ezzel a technikával valójában két tömböt hozunk létre, melyet az értékcserére használunk. A helyőrző első eleme a csereértékek első elemére cserélődik, a helyőrző második eleme a csereértékek második elemére cserélődik, és így tovább.

Bővítsük ki előző példánkat, és lássuk, hogyan festene egy teljes formalevél, melyet a szülőknek szánunk!

PHP-kód:

// a string amit testre kell szabni
$rawstring = 'Üdvözöljük, kedves szülő! <br />

  A gyermek egy kiváló diákunk!
  Hisszük, hogy a névmás sokat tanul nálunk.<br />
  A tanárok kedvelik a névmás2, és gyakran dicsérik: "Ügyes nem!"<br />';

// helyőrző tömb
$placeholders = array('gyermek', 'névmás', 'névmás2', 'nem');

// fiú csereértékek
$male_vals = array('fia', 'fiú', 'fiát', 'kisfiú');

// lány csereértékek
$female_vals = array('lánya', 'lány', 'lányát', 'kislány');

// fiú string
$malestr = str_replace($placeholders, $male_vals, $rawstring);

// lány string
$femalestr = str_replace($placeholders, $female_vals, $rawstring);

echo 'Fiú: ' . $malestr . '<br />';
echo 'Lány: ' . $femalestr;

Megjelenítés a böngészőben:

Fiú: Üdvözöljük, kedves szülő!

A fia egy kiváló diákunk! Hisszük, hogy a fiú sokat tanul nálunk.

A tanárok kedvelik a fiú2 és gyakran dicsérik: "Ügyes kisfiú!"

 

Lány: Üdvözöljük, kedves szülő!

A lánya egy kiváló diákunk! Hisszük, hogy a lány sokat tanul nálunk.

A tanárok kedvelik a lány2 és gyakran dicsérik: "Ügyes kislány!"

 

Megjegyzés: Megfigyelheted, hogy van egy hiba a kódban. A névmás2 nem úgy lett lecserélve, ahogy szerettük volna (a stringjeinkben fiú2 és lány2 jelent meg, a fiát és lányát helyett). Ez azért történt, mert a névmás lett először lecserélve, így a névmás szó a névmás2-ben lecserélődött fiú és lányra, így fiú2 és lány2 lett. Amikor a névmás2 lett cserélve, nem volt találat, így a stringben nincs fiát és lányát szó.

Ahhoz, hogy elkerüljük ezt a problémát, a névmás2-t kell előrehoznunk a helyőrző tömbben, és megfelelően megváltoztatni a csereértékek sorrendjét is.

PHP-kód: 

// helyőrző tömb
$placeholders = array('gyermek', 'névmás2', 'névmás', 'nem');

// fiú csereértékek
$male_vals = array('fia', 'fiát', 'fiú', 'kisfiú');

// lány csereértékek
$female_vals = array('lánya', 'lány', 'lányát', 'kislány');

Megjelenítés a böngészőben:

Fiú: Üdvözöljük, kedves szülő!

A fia egy kiváló diákunk! Hisszük, hogy a fiú sokat tanul nálunk.

A tanárok kedvelik a fiát, és gyakran dicsérik: "Ügyes kisfiú!"

 

Lány: Üdvözöljük, kedves szülő!

A lánya egy kiváló diákunk! Hisszük, hogy a lány sokat tanul nálunk.

A tanárok kedvelik a lányát, és gyakran dicsérik: "Ügyes kislány!"

 

Jó gyakorlást!

Az oldal sütiket használ, hogy személyre szabjuk a tartalmakat és reklámokat, hogy működjenek a közösségi média funkciók, valamint hogy elemezzük a weboldal forgalmát. Bővebben a "Részletek mutatása" gombra olvashat.
Az oldal sütiket használ, hogy személyre szabja az oldalon megjelenő tartalmat és reklámokat.