Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace
Forum PHP.pl > Forum > Przedszkole
Gość_rydzyk
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
crash
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!
Guest
Oj, przepraszam, dalem za mały odcinek tej tabeli:) Tam są rónież inne wartości nie zaczynające sie na ai_ sad.gif
crash
ai_ to tylko przykład wyrażenia do wyszukania, napisz może dokładniej o co Ci chodzi.
Guest
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
R4v3N
  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
crash
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. ?>
R4v3N
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. ?>
crash
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().
R4v3N
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.
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.