Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Niedokładne zamienianie w str_replace
Forum PHP.pl > Forum > Przedszkole
glencun
hej,

powiedzcie mi co mam zrobić - używam funkcji str_replace do zamienia słów w tekście i mam pewien problem.

Otóż jak w bazie mam ustawione, żeby zamieniał

dostali -> zyskali
dostali auto -> zyskali auto

to to niestety działa tylko dla tego pierwszego wyrazu czyli zamienia DOSTALI na ZYSKALI, a tego drugiego niestety nie, a to właśnie chodzi o to, że jak jest cały człon dwu-wyrazowy to ma zamienić na drugi człon dwu-wyrazowy.

Jak to ugryźć, bo myślę o tym już dwa dni i nic ?
nospor
Pokaż lepiej kod
glencun
No kod jest prosty

  1. $tekst = "Oni dostali auto";
  2. $plik1 = file("plik1.txt");
  3. $plik2 = file("plik2.txt");
  4. $zamien = str_replace($plik1, $plik2, $tekst);
  5.  
  6. echo $zamien;


A w tych plikach jest słowo po słowie, w każdej linii.
wookieb
Zmień kolejność:
Kod
dostali auto => zyskali auto
dostali => zyskali

glencun
To jedyne rozwiązanie ? Mądre, ale to niestety mi nie pomoże, bo zrobiłem tak, że wystarczy wpisać raz, a zamienia podwójnie czyli auto -> samochód, ale również samochód -> auto czyli potrzebuję innego rozwiązania ?


Bo jak mi zamieni dostali auto NA zyskali auto, to potem znów mi zamieni zyskali na dostali i głupiego robota tongue.gif
wookieb
Tak
glencun
Wookieb błysnąłeś teraz. Zamiast spamować, byś dał radę, a nie robił zamęcik. Już wymyśliłem tongue.gif
zordon
pewnie jest łatwiejsze rozwiązanie ale możesz spróbować zamieniać swoje frazy na metaznaki:

Zamieniasz wszystkie wystąpienia pożądanych ciągów znaków np:

  1. $text = str_replace('dostali', '#XX#', $inputText);
  2. $text = str_replace('dostali auto', '#YY#', $text);


potem definiujesz metaznaki:

  1. $t1 = array ('#XX#' => 'dostali', '#YY#' => 'dostali auto');
  2. $t2 = array ('#XX#' => 'zyskali', '#YY#' => 'zyskali auto');


i w zależności co chcesz wyświetlić:
  1. foreach($t1 as $meta => $replacement){
  2. $text = str_replace($meta, $replacement, $text);
  3. }


lub
  1. foreach($t2 as $meta => $replacement){
  2. $text = str_replace($meta, $replacement, $text);
  3. }


nie testowane, ale przy odpowiednim nazewnictwie, walidacji itp powinno działać
glencun
Tak, super przy 1000+ słowach wspaniale tongue.gif
zordon
Bardzo łatwo można to zautomatyzować, ale nikt tu za Ciebie nie będzie gotowców pisał
glencun
Wiem, bo tu same psy ogrodnika. Poradziłem sobie sam.
nospor
Zajrzyj do wiki czy gdziekolwiek a potem pisz o psach ogrodnika wink.gif

Poza tym jedziesz na innych a sam tylko co chwila strzelasz tekstem w stylu "poradziłem sobie sam" i nikomu nic nie pokazujesz. A może ktoś inny by chciał skorzystać ale nie może bo nie chcesz pokazać swojego rozwiązania.
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.