Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_replace, dlaczego to nie dziala?
Forum PHP.pl > Forum > Przedszkole
kapuch
Tak jak w temacie, czemu taki kod nie dziala jak powinien (nie koloruje):
  1. $dni = array('poniedzialek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota', 'niedziela');
  2. $tekst = "Byłem w czwartek w kinie.";
  3. $tekst_kolor = preg_replace("/".$dni."/", "<font color=\"red\">".$dni."</font>", $tekst);
  4. echo $tekst_kolor;
  5.  
  6. // A taki dziala
  7. $dni = array('poniedzialek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota', 'niedziela');
  8. $tekst = "Byłem w czwartek w kinie.";
  9. $tekst_kolor = preg_replace("/".$dni[3]."/", "<font color=\"red\">".$dni[3]."</font>", $tekst);
  10. echo $tekst_kolor;
  11.  
  12. // Taki tez dziala
  13. $dni = array('/poniedzialek/', '/wtorek/', '/środa/', '/czwartek/', '/piątek/', '/sobota/', '/niedziela/');
  14. $dzien_kolor = array('poniedzialek', 'wtorek', 'środa', '<font color="red">czwartek</font>', 'piątek', 'sobota', 'niedziela');
  15. $tekst = "Byłem w czwartek w kinie.";
  16. $tekst_kolor = preg_replace($dni, $dzien_kolor, $tekst);
  17. echo $tekst_kolor;

Chodzi o to, ze w manualu wystarczy odwolanie do nazwy tablicy, a funkcja sama podstawia odpowiedni klucz, ale jak widac u mnie dziala to tylko wtedy, gdy w parametrach preg_replace podam same nazwy funkcji bez
Kod
"/".$funkcja."/", "<font color=\"red\">".$funkcja."</font>" - w tym przypadku musze juz podac klucz tablicy :/

Mozna to jakos zrobic inaczej, bo nie bawi mnie rozwiazanie z druga tablica i w kazdym kluczu dodawanie <font color>.
Prosze tez nie zwracac uwagi na semantyke kodu i uzycie <font>, ktory jest juz zdeprecjonowany - wiem o tym, podalem tylko dla przykladu.

EDIT: Poprawilem literowke w kodzie, bylo "</font"> zamiast "</font>". Ale to nie ma wplywu na moj problem, poniewaz ten kod pisalem specjalnie na potrzebe tego tematu, w oryginale mam troche inaczej i bez literowek smile.gif
Wicepsik
preg_replace - przykład #2
kapuch
Cytat(Wicepsik @ 1.07.2010, 15:16:31 ) *
preg_replace - przykład #2

No tak, wlasnie tak zrobilem w 3 kodzie, ale czy to jedyne wyjscie?
I czemu to nie dziala na tej zasadzie jak dodam przed tablica i po jakies dodatkowe atrybuty?
Na dwie tablice nie moge sobie pozwolic, bo gdyby to chodzilo tylko o dni tygodnia to bym to zrobil w ten sposob, ale tych slow kluczowych ma byc setki, takze nie wyobrazam sobie robienie drugiej tablicy z setka kluczy i dodawaniem tego <font> :/
Wiem, mozna przepuscic ta druga tablice przez foreach() i dodat atrybuty jakie potrzeba, ale jak by to wplynelo na czas wykonywania skrypty?
Przy kazdym przeladowaniu strony petla foreach wykonywala by setki przebiegow, pozniej nastepne foreach i kolejne setki przebiego zeby to pokolorowac :/
Ah kurde czemu to nie dziala tak jak powinno :/

OK z druga tablica dalem sobie rade (wyeliminowalem ja) w taki sposob:
  1. $dni = array('/(poniedzialek)/', '/(wtorek)/', '/(środa)/', '/(czwartek)/', '/(piątek)/', '/(sobota)/', '/(niedziela)/');
  2. $tekst = "Byłem w czwartek w kinie.";
  3. $tekst_kolor = preg_replace($dni, "<font color=\"red\">\\1</font>", $tekst);
  4. echo $tekst_kolor;

Teraz jeszcze cos z ta pierwsza trzeba zrobic, zeby nie trzeba bylo patternu w kazdym kluczu wklejac, bo ten tutaj to tylko przyklad, w oryginalej ten pattern jest bardziej rozbudowany, a chcialbym, aby nawet nie kumaty uzytkownik, mogl dodawac nowe klucze, bez koniecznosci wstawiana patternu pod regexa.


:/
erix
Cytat
OK z druga tablica dalem sobie rade (wyeliminowalem ja) w taki sposob:

Przecież do tego wystarczy zwykły str_replace, po co tu pregi? winksmiley.jpg

kapuch
Cytat(erix @ 2.07.2010, 10:05:48 ) *
Przecież do tego wystarczy zwykły str_replace, po co tu pregi? winksmiley.jpg

Niestety str_replace() w moim przypadku to zle wyjscie.
Uzywam bardzo rozbudowanych match'ow, te tutaj to tylko dla przykladu, zeby nie gmatwac kodu i zwrocic uwage na istote problemu.
Faktycznie gdyby mi chodzilo o zwykla podmiane czwartku na "czerwony" czwartek to str_replace() bylo by ok, ale jesli dochodzi do tego kilkanascie warunkow - kiedy ten czwartek ma byc podmieniony, to juz preg_replace zostaje.

Jak narazie problem tymczasowo rozwiazalem poprzez dodanie jednej tablicy z samymi wyrazami, i pozniej foreach'em zmieniam ta tablice na matcha.
Ale raczej to nie jest zbyt madre, jesli chodzi o wydajnosc....
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.