Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z preg_replace_callback
mastermindssj2
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 21.06.2011

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


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ę
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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

Ten post edytował mortus 25.12.2012, 23:16:10
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: 15.09.2025 - 15:22