| 
	
 | 
 Posted by Csaba Gabor on 11/19/07 14:01 
Poster asks how to pass an additional parameter to callback function in preg_replace_callback. 
Instead of preg_replace_callback it may be feasible to use preg_replace.  Here's an example showing parameter  
passing (watch the wrapping - 5 lines total): 
 
function xslashify($string, $safeChars = "0-9A-Za-z'\\\\0\"") { 
   // escape all but the safe characters 
   $string = str_replace(array("\\",   "\x0",  '"',    "'"), 
              array('\x5c', '\x00', '\x22', '\x27'), $string); 
   return preg_replace ("/[^$safeChars]/e", 
      "'\\x' . substr('00' . dechex(ord('$0')),-2)", $string); } 
 
 
 
To use poster's own setup as a model, the following will put an apostrophe after each vowel: 
 
$param = "\\'"; 
$test = preg_replace ('/[aeiou]/ie', 
            "my_function(array('$0'), '$param')", 
            "Example string"); 
function my_function ($aMatches, $param = "^") { 
   return "$aMatches[0]$param"; } 
print $test; 
 
 
Another option is to have a global variable, 
and the callback could make use of that. 
 
Csaba Gabor from Vienna 
 
Marc Bauer wrote: 
> Hi 
>  
> i have an preg_replace_callback that matches some strings and i'd like to  
> execute a sub function with two params. Only thing i need is to call the  
> subfunction 'my_function' with the $matches and an addition $param. How can  
> i add the second param to the preg_replace_callback line? 
>  
>  
> function test_function($demo) { 
>   $example = "Some data"; 
>   $test = preg_replace_callback('my example regexp', 'my_function',  
> $example); 
> } 
>  
> function my_function($matches, $param = 0) { 
>   //do some stuff here 
>   if ($param)  { 
>     // do something special 
>   } 
> } 
>  
>  
> Regards 
> Marc
 
  
Navigation:
[Reply to this message] 
 |