Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podmiana wyrazów w danym ciągu tekstowym
Forum PHP.pl > Forum > Przedszkole
L_Devil
Mamy ciąg tekstowy, np:
Kod
Kupując wspierasz budowę itc. Więc kupuj więcej!
I teraz chciałbym pewne konkretne słowa podmienić na inne (powiedzmy. 'budowę' i 'kupuj'). Przygotowywuję sobie dwie tablice. Jedna:
$change = array ('budowę', 'kupuj');
$change_to = array ('produkcję', 'płać');
etc.
Teraz używam funkcji:
  1. <?php
  2. $string = &#092;"Kupując wspierasz budowę itc. Więc kupuj więcej!\";
  3. $string = str_replace($change, $change_to, $string);
  4. echo $string;
  5. ?>

Efekt:
Cytat
płaćąc wspierasz produkcję itc. Więc płać więcej!
Czyli w stringu "Kupując" został podmieniony fragment "Kupuj(...)".

Aby uniknąć tego efektu wymyśliłem że przed i po każdym stringu będzie dorzucona spacja. Czyli dorzucamy:
  1. <?php
  2. $string = &#092;"Kupując wspierasz budowę itc. Więc kupuj więcej!\";
  3. for($i=0; $i < count($change); $i++){
  4. $change[$i] = &#092;" \".$change[$i].\" \";
  5. $change_to[$i] = &#092;" \".$change[$i].\" \";
  6.  
  7. }
  8. $string = str_replace($change, $change_to, $string);
  9. echo $string;
  10. ?>
I teraz uzyskujemy efekt:
Cytat
Kupując wspierasz produkcję itc. Więc płać więcej!
Czyli to, o co nam chodziło. Teraz niestety kolejny problem. Jeżeli string wejściowy będzie taki:
Kod
Kupując wspierasz budowę itc. Więc kupuj!
(tzn. bo 'kupuj' nie ma spacji). To oczywiście wyraz nie zostanie podmieniony.
No i jestem w kropce. Jak podmieniać stringi, które są samodzielnymi wyrazami, ale nie koniecznie po obu ich stronach znajdują się spacje?
j00seph
Hmm...
Na pewno trzeba by to robic poprzez wyrazenia regularne - > eregi_replace();
Wave
Po pierwszę co chcesz uzyskać??

Płacąc wspierasz produkcję itc. Więc płać więcej! questionmark.gif
  1. <?php
  2. $change = array ('budowę', 'Kupuj', 'kupuj');
  3. $change_to = array ('produkcję', 'Płac', 'płać');
  4. $string = &#092;"Kupując wspierasz budowę itc. Więc kupuj więcej!\";
  5. $string = str_replace($change, $change_to, $string);
  6. echo $string;
  7. ?>
L_Devil
Nie, to jest właśnie niepożądany efekt. Ma podmieniać konkretne wyrazy, nawet jeżeli przed i po nich NIE znajduje się spacja (np. kropka). Natomiast jeżeli pominiemy spację w matrycy znajduje się np. 'bug' to wyraz 'bugtraq' automatycznie zostanie zmieniony na 'xxxtraq'. Tego nie chcę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.