Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z preg_replace_callback
Forum PHP.pl > Forum > PHP
mastermindssj2
Witam,
mam problem, który opiszę na przykładzie:
  1. $replaced = preg_replace_callback('/[0-9]+/','doit','W 1969 roku mija 30 lat od wybuchu drugiej wojny swiatowej');
  2.  
  3. function doit($matches) {
  4. return $matches[0]+10;
  5. }

Chodzi o to, żeby sparametryzować wartość dodawaną, czyli w tym przypadku 10 tak aby można było przekazać ten parametr przy wywołaniu funkcji doit.
doit($matches,$val) nie zadziała, bo preg_replace_callback oczekuje w drugim parametrze typu callback a taki zapis zwróciłby wartość. Ma ktoś jakiś sposób na to? Z góry dziękuję
mortus
Kiedyś miałem podobny problem i gdzieś w sieci natrafiłem na rozwiązanie, które wykorzystuje do tego celu pewną klasę (możemy ją nazwać CallbackHelper).
  1. class CallbackHelper {
  2. private $_param;
  3. public function __construct($param) {
  4. $this->_param = $param;
  5. }
  6. public function callback($matches) {
  7. return $this->_param . $matches[0] . $this->_param;
  8. }
  9. }
  10. $output = 'abrakadabra';
  11. $pattern = '/a/';
  12. $param = '-';
  13. $callback = new CallbackHelper($param);
  14. $output = preg_replace_callback($pattern, array($callback, 'callback'), $output);
  15. echo $output;

Wykorzystujemy tutaj fakt, że callback-iem może być metoda istniejącego obiektu, którą przekazujemy jako tablicę zawierającą pod indeksem 0 ten obiekt, a pod indeksem 1 nazwę metody. Doczytaj w manualu.

Oczywiście nie jest to jedyne rozwiązanie problemu, ale chyba jedyne "estetyczne" (w rozumieniu jakiegoś tam standardu kodowania).
Więcej: Google -> passing additional arguments to preg_replace_callback
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.