How to use preg_replace_callback?

php, preg-replace, preg-replace-callback

Solution

Use the following:

$out = preg_replace_callback(
    "(\[otsection\](.*?)\[/otsection\])is",
    function($m) {
        static $id = 0;
        $id++;
        return "<div class=\"otsection\" id=\"ots".$id."\">".$m[1]."</div>";
    },
    $in);

In particular, note that I used a `static` variable. This variable persists across calls to the function, meaning that it will be incremented every time the function is called, which happens for each match.

Also, note that I prepended `ots` to the ID. Element IDs should not start with numbers.

For PHP before 5.3:

$out = preg_replace_callback(
    "(\[otsection\](.*?)\[/otsection\])is",
    create_function('$m','
        static $id = 0;
        $id++;
        return "<div class=\"otsection\" id=\"ots".$id."\">".$m[1]."</div>";
    '),
    $in);

Problem

I have the following HTML statement ``` [otsection]Wallpapers[/otsection] WALLPAPERS GO HERE [otsection]Videos[/otsection] VIDEOS GO HERE ``` What I am trying to do is replace the [otsection] tags with an html div. The catch is I want to increment the id of the div from 1->2->3, etc.. So for example, the above statement should be translated to ``` <div class="otsection" id="1">Wallpapers</div> WALLPAPERS GO HERE <div class="otsection" id="2">Videos</div> VIDEOS GO HERE ``` As far as I can research, the best way to do this is via a preg_replace_callback to increment the id variable between each replacement. But after 1 hour of working on this, I just cant get it working. Any assistance with this would be much appreciated!

Original source

Related problems