On 18 December 2012 13:24, Stefan Neufeind <[email protected]> wrote:
> Since we already have functionality for replacing with arrays in place,
> I wondered if giving it one string to replace and then an array to
> choose the replacement from (rotating) would be an option. Currently
> that's "unsupported" (either two strings or two arrays).
>
It's certainly possible to implement, but personally it feels like odd
behaviour. I don't know what other people think about it.
> I think you could use a callback-function but would need to add quite a
> few more lines to initialise your array first, do a "next()" on the
> array inside the callback-function and (how would you pass it that
> array?) and still would have to handle starting from beginning of the
> array again once you reach the end etc.
>
You pass the array using "use". You could do it something like this:
$replacements = array(
'one', 'two', 'three'
);
$result = preg_replace_callback(
'/word/',
function($matches) use (&$replacements) {
$current = current($replacements);
next($replacements) || reset($replacements);
return $current;
},
'word word word word word'
);
var_dump($result);
Output:
string(21) "one two three one two"