Re: Extension for str_replace / preg_replace with arrays

From: Date: Thu, 20 Dec 2012 04:30:59 +0000
Subject: Re: Extension for str_replace / preg_replace with arrays
References: 1 2 3 4 5  Groups: php.internals 
Request: Send a blank email to internals+get-64371@lists.php.net to get a copy of this message
On 12/19/2012 03:18 PM, Larry Garfield wrote:
You could likely simplify the code even further using an infinite iterator: http://us1.php.net/infiniteiterator $result = preg_replace_callback(
     '/word/',
     function($matches) use (&$replacements_iterator) {
         return $replacements->next();
     },
     'word word word word word'
); --Larry Garfield
What am I missing that causes the first call to $replacements_iterator->current() to return NULL unless the iterator is rewound before use? Chris ------------------ <?php $replacements = array(
    'one', 'two', 'three'
); $replacements_iterator = new InfiniteIterator(new ArrayIterator($replacements)); $replacements_iterator->rewind(); // why is the rewind needed? $result = preg_replace_callback(
    '/word/',
    function($matches) use ($replacements_iterator) {
        $r = $replacements_iterator->current();
        $replacements_iterator->next();
        return $r;
    },
    'word word word word word'
); var_dump($result); // Outputs:
//    string(21) "one two three one two"
// Without the call to $replacements_iterator->rewind(), the output is:
//    string(18) " two three one two"
?> -- christopher.jones@oracle.com http://twitter.com/ghrd

« previous php.internals (#64371) next »