Что не так в моем коде:
$i = new RegexIterator( new ArrayIterator(array( 'test1'=>'test888', 'test2'=>'what?', 'test3'=>'test999')), '/^test(.*)/', RegexIterator::REPLACE); foreach ($i as $name=>$value) echo $name . '=>' . $value . "\n";
Почему итератор пуст? Спасибо за вашу помощь!
Если вы опустите режим работы (третий параметр в новом операторе RegexIterator), вы получите соответствующие значения, например:
$array = array('test1' => 'test888', 'test2' => 'what?', 'test3' => 'test999'); $pattern = '/^test(.*)/'; echo '<pre>'; echo "DEFAULT\n"; $arrayIterator = new ArrayIterator($array); $regexIterator = new RegexIterator($arrayIterator, $pattern); foreach ($regexIterator as $value) {echo "$value\n";} echo '</pre>';
Вы можете играть с различными режимами работы, в зависимости от того, что вы хотите. Прочитайте документацию setMode: http://www.php.net/manual/en/regexiterator.setmode.php
Как уже говорилось, это ошибка в PHP. Я сообщил об этом на php.net: http://bugs.php.net/bug.php?id=50579
Рассмотрим следующий код
$mixedArray=array( 'tester2', 'tes1', 'bad4', '2good2', '2birds', 'birds8', '8young girls', '6 young boys' ); $ait=new ArrayIterator($mixedArray); $regexIt=new RegexIterator($ait,'/^(\d+)(\w+)/', RegexIterator::REPLACE); $regexIt->replacement='$2:$1'; foreach($regexIt as $key=>$value){ echo $value."<br>"; }
Вывод
good2:2 birds:2 young:8 girls