Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> str_replace lub cos podobnego, Tylko jeden raz..
SHiP
post
Post #1





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Mam problem z wyrażeniami regularnymi ;] Za pomocą preg_mach_all odnajduje wszystkie ciągi do zmiany, nastepnie montuje pętelke i za pomocą str_replace podmieniam co się da. Wszystko działa pięknie dopuki nie mam do zamiany czegoś w stylu...

Kod
bla => cos tam
ble => cos tam 2
blacha => bardzo fajne
meble => po prostu extra


Co się dzieje... najpierw skrypt odnajduje i podmienia wszystkie bla tak więc z mojej blachy pozostaje
Kod
costamcha

Nastepnie podmienia wszystkie ble na cos tam i z moich mebli zostaje ;]
Kod
mecos tam 2

A niestety o coś takiego mi nie chodziło ;] Czy ktoś może zna sposób aby uniknąć tego typu akcji? Czy da się ograniczyć działanie funkjcji str_replace do jednej podmiany? Byłbym wdzięczny za jakiekolwiek wskazówki...
Go to the top of the page
+Quote Post
piczu
post
Post #2





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 4.01.2005
Skąd: piczu.info

Ostrzeżenie: (10%)
X----


uzyj preg_replace" title="Zobacz w manualu php" target="_manual
Go to the top of the page
+Quote Post
SHiP
post
Post #3





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Moj skrypt poczuł znaczny spadek szybkości ;].. jest moze jakas szybsza technika? Ja jeszcze spróbuję posortować tablice zwracaną przez preg_mach_all bo nie ma( i raczej nie bedzie) w niej wiecej niż 10 elementow wiec moze to bedzie szybsze rozwiązanie...
Go to the top of the page
+Quote Post
piczu
post
Post #4





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 4.01.2005
Skąd: piczu.info

Ostrzeżenie: (10%)
X----


to moze wyszukuj nazwa => lub => nazwa?
Go to the top of the page
+Quote Post
SHiP
post
Post #5





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(piczu @ 25.07.2006, 17:12 ) *
to moze wyszukuj nazwa => lub => nazwa?

Nie rozumiem ;]

znalazłem rsort" title="Zobacz w manualu php" target="_manual Świetnie się tutaj nadaje i działa mi o ok. 0.0006s szybciej niż preg
Tylko nie wiem dlaczego jeśli mam tablice wielowymiarowa nie moge napisać
  1. <?php
  2. $nowa = rsors($moja[0]);
  3. ?>

php glupieje ;] musze tablice tymczasową tworzyc ;/
Go to the top of the page
+Quote Post
piczu
post
Post #6





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 4.01.2005
Skąd: piczu.info

Ostrzeżenie: (10%)
X----


nadal nie wiem jak wyglada twoj kod, ale preg_match" title="Zobacz w manualu php" target="_manual wyszukuje do pierwszego pasujacego ciagu,
Go to the top of the page
+Quote Post
siemakuba
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Możesz pokazać cały ten kod i napisać co i jak potrzebujesz zamieniać? Mam wrażenie, że strasznie nakombinowałes tam, a może da się to zrobić prościej i nie będzie problemu z wydajnością :)

pozdr.
Go to the top of the page
+Quote Post
SHiP
post
Post #8





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. <?php
  2. private function replaceVars($param) // funkcja wyszukuje i konwertuje zmienne w parametrach funkcji
  3. {
  4. if(strpos($param,'$')===false) return $param; // jesli nie ma zmiennych zwroc to co jest...
  5.  
  6. preg_match_all('#$([a-zA-Z0-9_]+)#is', $param, $vars);
  7. rsort($vars[1]);
  8.  
  9. for($i=0, $n=count($vars[1]); $i<$n; $i++)
  10. {
  11. /* ten kod obsluguje sekcje dla was nie ważne ;)
  12. $ln=strpos($vars[1][$i],'[');
  13. if($ln) $arrayName =substr($vars[1][$i],1,$ln); else $arrayName=$vars[1][$i];
  14. $sectionId = array_search($arrayName,$this -> section_name);
  15. if($sectionId) $param = str_replace('$'.$vars[1][$i],'$this -> vars[''.$vars[1][$i].''][$i'.$sectionId.']',$param);
  16. else */
  17.  
  18. $param = str_replace('$'.$vars[1][$i],'$this -> vars[''.$vars[1][$i].'']',$param);
  19.  
  20. }
  21. return $param;
  22. }
  23. ?>


Tak to działa... jako $param do funkcji przekazuje ciąg zawierający zmienne np...
Kod
bla bla $zmienna bla bla bla $zmie $z $zmien sdf


Teraz zamieniam to na
Kod
bla bla $this -> vars['zmienna'] bla bla bla $this -> vars['zmie'] $this -> vars['z'] $this -> vars['zmien'] sdf


Po więcej szczegółów zapraszam na Inny temat na php.pl (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
siemakuba
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Nie wiem na ile ważny jest ten kod, który oprócz str_replace działa sobie w pętli. Jeżeli będzie to dla ciebie OK, możesz sobie zamianę wartości wysatwić poza pętlę i zrobić tak:
  1. <?php
  2. $str = 'bla bla $zmienna bla bla bla $zmie $z $zmien $sdf';
  3. $str = preg_replace('/$([a-z0-9_]*)s?/si', '$this->vars["1"]', $str);
  4. ?>


pozdr.
Go to the top of the page
+Quote Post
SHiP
post
Post #10





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


no wlasnie ten kod jest ważny... co do preg_replace jak juz wspomniałem działa dużo wolniej niz sortowanie tablicy więc chyba zostane przy tym kodzie króry mam... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

dzięki za odpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 02:31