1

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
  • 54,795
  • 26
  • 160
  • 252
sanchitkhanna26
  • 2,073
  • 8
  • 26
  • 41

1 Answers1

7

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
  • 184,866
  • 48
  • 414
  • 792
Niet the Dark Absol
  • 311,322
  • 76
  • 447
  • 566