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.

1
  • 2
    Use of global keyword is, in general, a code smell. Commented Apr 10, 2013 at 19:32

1 Answer 1

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.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.