Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Preg replace i funkcje
Forum PHP.pl > Forum > Przedszkole
fastlone
Witajcie.

Chcę, aby w funkcji preg_replace, jako drugi argument (czyli to, co ma wyjść) zastosować funkcję, w której zastosowana jest rzecz "zachowana z argumentu 1.
  1. $content = preg_replace("/\[userlink](.*?)\[\/userlink\]/si",
  2. build_profile_link(format_name($user_usergroupscache['$1']['username'], $user_usergroupscache['$1']['usergroup'], $user_usergroupscache['$1']['displaygroup']), $user_usergroupscache['$1']['uid']), $content);
  3.  

Ma to być swego rodzaju kod BBCode, lecz niestety po wprowadzeniu id w tagi [userlink] - dupa.
Sephirus
Ok po pierwsze (nie wiem czy zauważyłeś) masz błąd:

  1. $content = preg_replace("/\[userlink\](.*?)\[\/userlink\]/si", // brakowało "\" przed "]"


ale do rzeczy... Ogólnie funkcja preg_replace przyjmuje jako 2 argument albo string albo array więc wprost się tego nie da zrobić.

Moja propozycja zczytać to do tablicy poprzez preg_match_all() i utworzyć dwie tabelki
- wejściową, w której umieścisz tekst do podmiany czyli np.: "[userlink]123[/userlink]"
- wyjściową, w której umieścisz wynik funkcji format_name(...)

Nastepnie dopiero dasz preg* lub str* _replace dając jako argumenty te 2 tabelki i po sprawie wink.gif

Jak coś moge dać łatwy przykład
fastlone
Mógłbyś mi wytłumaczyć/naprowadzić, w jaki sposób to zrobić? Kompletnie nie mam pojęcia.
Sephirus
Ok już pisze daj mi 5 minut

EDIT: Już smile.gif

  1. $content; // W tym mamy treść
  2.  
  3. if(preg_match_all('/\[userlink\](.+)\[\/userlink\]/Usi',$content,$matches)) // zwróć uwagę na flagę U w preg'u - żeby uniknąć pobrania szerszej "wersji tego znacznika BB"
  4. {
  5. $inArray = array();
  6. $outArray = array();
  7. for($i = 0; $i < count($matches[0]); $i++)
  8. {
  9. $inArray[] = $matches[0][$i];
  10. $outArray[] = twoja_funkcja($matches[1][$i]);
  11. }
  12.  
  13. $content = str_replace($inArray,$outArray,$content);
  14. }
  15. echo $content;


I tyle - podmień swoją funkcję tylko tak jak jej używasz i tyle.

Moga tu być jakieś blędy bo pisałem szybko.

EDIT: Dodałem IF'a w razie jakby nie było tego znacznika [userlink] w treści.
fastlone
Sephrius - jesteś wielki tongue.gif
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.