Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg_replace
-Gość_rydzyk-
post
Post #1





Goście







Witam!
Mam pewien problem, mianowicie:
Mam tablicę:
  1. <?php
  2. $byte_names = array("ai_ally_manager", "ai_battle_line", "ai_changehintgroup", "ai_changetarget"..........
  3. ?>


oraz zmienną $tresc. Chcialbym aby wszystkie wyrażenia z tej tablicy znalezione w $tresc były zamieniane na <div style="costam">Wyrazenia</div>. Próbowałem preg_replace ale jakos nie moge tego skapowac sad.gif, a robienie setki str_replace wydaje mi się głupie troche sad.gif
Go to the top of the page
+Quote Post
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Zakładając, że szukasz "ai_":
  1. <?php
  2. $byte_names = array("ai_ally_manager", "ai_battle_line", "ai_changehintgroup", "ai_changetarget");
  3.  
  4. print_r( preg_replace( '/ai_/', '<div style="costam">0</div>', $byte_names ) );
  5. ?>

Manual się kłania!


--------------------
Go to the top of the page
+Quote Post
-Guest-
post
Post #3





Goście







Oj, przepraszam, dalem za mały odcinek tej tabeli:) Tam są rónież inne wartości nie zaczynające sie na ai_ sad.gif
Go to the top of the page
+Quote Post
crash
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


ai_ to tylko przykład wyrażenia do wyszukania, napisz może dokładniej o co Ci chodzi.


--------------------
Go to the top of the page
+Quote Post
-Guest-
post
Post #5





Goście







Mam tabelę z różnymi wartościami i chcę aby w zmiennej $treść skrypt wyszukiwał ów wartości i wstawiał je w <DIV>y smile.gif
Go to the top of the page
+Quote Post
R4v3N
post
Post #6





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Pultusk

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


  1. <?php
  2. $byte_names = array("ai_ally_manager", "ai_battle_line", "ai_changehintgroup", "ai_changetarget");
  3.  
  4. for($i=0;$i<count($byte_names);$i++) {
  5. $byte_names = preg_replace( '/'.$byte_names[$i].'/', '<div style="costam">0</div>', $byte_names );
  6. }
  7.  
  8. echo "<pre>";
  9. print_r($byte_names);
  10.  
  11.  
  12. ?>


Prosze bardzo

pozdro
Go to the top of the page
+Quote Post
crash
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


R4v3N: sprawdziłeś chcoiaż co Twój kod robi? Bo chyba nie to o co chodziło...

Prawdopodobnie dobre rozwiązanie:
  1. <?php
  2. $tresc = 'To jest ai_ally_manager treść, w której ai_battle_line mają być (ai_changehintgroup) wyszukane elementy z tablicy $byte_names czyli np.: ai_changetarget'; 
  3.  
  4. $byte_names = array( 'ai_ally_manager', 'ai_battle_line', 'ai_changehintgroup', 'ai_changetarget' );
  5.  
  6. function makeRegex( &$val, $key )
  7. {
  8.  $val = '/' . $val . '/';
  9. }
  10.  
  11. array_walk( $byte_names, 'makeRegex' );
  12.  
  13. $tresc = preg_replace( $byte_names, '<div style="costam">0</div>', $tresc );
  14.  
  15. echo $tresc;
  16. ?>


--------------------
Go to the top of the page
+Quote Post
R4v3N
post
Post #8





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Pultusk

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


ehmmm fakt bo zmienic 2 zmienne to problem tongue.gif

  1. <?php
  2. $tresc = 'To jest ai_ally_manager treść, w której ai_battle_line mają być (ai_changehintgroup) wyszukane elementy z tablicy $byte_names czyli np.: ai_changetarget'; 
  3.  
  4. $byte_names = array("ai_ally_manager", "ai_battle_line", "ai_changehintgroup", "ai_changetarget");
  5.  
  6. for($i=0;$i<count($byte_names);$i++) {
  7. $tresc = preg_replace( '/'.$byte_names[$i].'/', '<div style="costam">0</div>', $tresc );
  8. }
  9.  
  10. echo $tresc;
  11.  
  12. ?>
Go to the top of the page
+Quote Post
crash
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


To pomyśl teraz o wydajności... Wywołanie count( $byte_names ) razy funkcji preg_replace(), uruchomienie kompilatora wyrażeń, analizowanie ciągów itp itd. Będzie trwać naprawdę zdecydowanie dłużej niż jedno wywołanie preg_replace, podanie jej tablicy i pozwolenie na wewnętrzene przetworzenie wszystkiego. Twój kod byłby znośny gdybyś przynajmniej użył str_replace().


--------------------
Go to the top of the page
+Quote Post
R4v3N
post
Post #10





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Pultusk

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


chcialem ale nie chcial mi sie poprawiac, przecierz to nie dla mnie typek dostal pomysl niech teraz go sensownie wykozysta.

Zreszta zaloze sie ze jezeli ma problemy z takim czyms, to twojego kodu nie zrozumie tongue.gif a moj (chociaz nie efektywny) jest bardziej trywialny.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 04:13