Re: Extension for str_replace / preg_replace with arrays
| From: | Christopher Jones | Date: | Thu, 20 Dec 2012 23:34:07 +0000 |
| Subject: | Re: Extension for str_replace / preg_replace with arrays | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-64393@lists.php.net to get a copy of this message | ||
On 12/20/2012 08:31 AM, Larry Garfield wrote:
On 12/19/12 10:30 PM, Christopher Jones wrote:That is documented, so it's OK. The curiosity (bug?) is the need to call rewind(): $replacements_iterator = new InfiniteIterator(new ArrayIterator($replacements)); $replacements_iterator->rewind(); // why is the rewind needed? $result = preg_replace_callback(On 12/19/2012 03:18 PM, Larry Garfield wrote:Eh, nothing. You're right, next() doesn't return an element, it just advances, so you still need the current() call. Which seems kinda silly to me, but whatev.You could likely simplify the code even further using an infinite iterator: http://us1.php.net/infiniteiterator $result = preg_replace_callback(What am I missing that causes the first call to $replacements_iterator->current() to return NULL unless the iterator is rewound before use?'/word/', function($matches) use (&$replacements_iterator) { return $replacements->next(); }, 'word word word word word'); --Larry Garfield
'/word/',
function($matches) use ($replacements_iterator) {
$r = $replacements_iterator->current();
$replacements_iterator->next();
return $r;
},
'word word word word word word word word'
);
In other (simple) scripts using InfiniteIterator the rewind wasn't needed.
--
christopher.jones@oracle.com http://twitter.com/ghrd