I have a function which uses preg_replace()
where the pattern and replacements are arrays. I need a counter to track the replacements, so I am converting the function to use preg_replace_callback
with a closure, but I can't seem to find a way to distinguish which pattern the match being passed to the callback matches. Is there a way to do array => array replacement using preg_replace_callback?
Ideally this is what I'd like to work, but obviously it won't since $pattern and $replace are evaluated going into the call and not inbetween each replacement
function replaceTags($text)
{
$i = 1;
$pattern = array(
'/\[d\](.*?)\[\/d\]/',
'/\[s\](.*?)\[\/s\]/',
);
$replace = array(
'<div id="'.($i++).'">$1</div>',
'<span id="'.($i++).'">$1</span>',
);
return preg_replace($pattern, $replace, $text);
}
preg_replace
already supports array -> array replacement. Does it not fit your needs? – Waleed Khan Jul 18 '12 at 1:45preg_replace
into doing both. – Hamish Jul 18 '12 at 2:11