2009-12-24 6 views
5

Quel est le problème dans mon code:comment travailler avec le mode RegexIterator :: REPLACE?

$i = new RegexIterator(
    new ArrayIterator(array(
    'test1'=>'test888', 
    'test2'=>'what?', 
    'test3'=>'test999')), 
    '/^test(.*)/', 
    RegexIterator::REPLACE); 

foreach ($i as $name=>$value) 
    echo $name . '=>' . $value . "\n"; 

Le iterator est vide, pourquoi? Merci de votre aide!

+1

S'il vous plaît nous en dire plus sur votre objectif/Qu'est-ce que vous voulez atteindre. Le résultat attendu pour votre exemple de code serait un bon point de départ. – VolkerK

+0

Je suppose que, selon la description manuelle (RegexIterator :: REPLACE Remplacer l'entrée actuelle ou la clé actuelle), qu'il devrait retourner toutes les clés correspondantes => valeurs qui pourraient être remplacées. Il n'y a pas d'exemples dans le manuel, donc, on ne sait pas comment l'utiliser et où définir le modèle de remplacement. – Alexey

Répondre

1

Si vous OMMISSIONS le mode de fonctionnement (3ème paramètre dans votre nouvelle déclaration de RegexIterator) vous obtiendrez les valeurs correspondantes, comme ceci:

$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>'; 

Vous pouvez jouer avec les différents modes de fonctionnement, en fonction de ce que vous vouloir. Allez lire sur la documentation setMode: http://www.php.net/manual/en/regexiterator.setmode.php

+0

Mais si vous ajoutez $ regexIterator-> setMode (RegexIterator :: REPLACE); retourne l'itérateur vide (comme dans l'exemple de la question), donc, on ne sait toujours pas comment utiliser le mode REPLACE. – Alexey

+0

Oui, je ne peux pas dire que j'ai utilisé le mode REPLACE avec succès. J'irais avec preg_replace .. –

+1

Alexey, c'est peut-être un bug en PHP? J'ai PHP5.3 – yegor256

0

Consultez le code suivant

$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>"; 
} 

de sortie

good2:2 
birds:2 
young:8 girls