2

How to use a local variable in preg_replace_callback in PHP. I have the following code:

function pregRep($matches)
{
    global $i; $i++;

    if($i > 2)
    {     
          return '#'.$matches[0];
    }
    else
    {
        return $matches[0];
    }
}

$i = 0;
$str =  preg_replace_callback($reg_exp,"pregRep",$str); 

And also $str is a string, $reg_exp is a regex expression. Both of these are well defined.

Thanks for your help.

Aleks G
  • 56,435
  • 29
  • 168
  • 265
sanchitkhanna26
  • 2,143
  • 8
  • 28
  • 42

1 Answers1

9

The easiest way is with an anonymous function as callback:

$result = preg_replace_callback(
    $pattern,

    function ($match) use ($variable) {
        // do something
    },

    $subject
);

Note that you can add multiple variables in this way, but it will create a copy of that variable as it is when the function is defined (this is important if you are assigning it to a variable for multiple uses). If you want a "live" reference to the variable, use &$variable.

Of course, using arrow functions instead requires PHP 7.4 or newer.

hakre
  • 193,403
  • 52
  • 435
  • 836
Niet the Dark Absol
  • 320,036
  • 81
  • 464
  • 592