可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
What is wrong in my code:
$i = new RegexIterator( new ArrayIterator(array( 'test1'=>'test888', 'test2'=>'what?', 'test3'=>'test999')), '/^test(.*)/', RegexIterator::REPLACE); foreach ($i as $name=>$value) echo $name . '=>' . $value . "\n";
The iterator is empty, why? Thanks for your help!
回答1:
If you ommit the operation mode (3rd parameter in your new RegexIterator statement) you'll get the matching values, like so:
$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>';
You can play with the different operation modes, depending on what you want. Go read up on the setMode documentation: http://www.php.net/manual/en/regexiterator.setmode.php
回答2:
As said already, it's a bug in PHP. I reported it to php.net: http://bugs.php.net/bug.php?id=50579
回答3:
Consider the following code
$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>"; }
Output
good2:2 birds:2 young:8 girls