2009-12-24 19 views
5

¿Qué está mal en mi código:cómo trabajar con el modo 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"; 

El iterador está vacía, ¿por qué? ¡Gracias por tu ayuda!

+1

favor decirnos más acerca de su objetivo/Lo que se quiere lograr. El resultado esperado para su código de ejemplo sería un buen punto de partida. – VolkerK

+0

Supongo que, de acuerdo con la descripción manual (RegexIterator :: REPLACE Reemplace la entrada actual o la clave actual), debe devolver todas las claves coincidentes => valores que podrían reemplazarse. No hay ejemplos en el manual, por lo tanto, no está claro cómo usarlo y dónde definir el patrón de reemplazo. – Alexey

Respuesta

1

Si ommit el modo de funcionamiento (3er parámetro en su nuevo estado de RegexIterator) obtendrá los valores coincidentes, así:

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

Se puede jugar con los diferentes modos de operación, dependiendo de lo que querer. Ve a leer en la documentación de setMode: http://www.php.net/manual/en/regexiterator.setmode.php

+0

Pero si agrega $ regexIterator-> setMode (RegexIterator :: REPLACE); devuelve el iterador vacío (como en el ejemplo de la pregunta), por lo tanto, todavía no está claro cómo usar el modo REEMPLAZAR. – Alexey

+0

Sí, no puedo decir que he utilizado el modo REEMPLAZAR con éxito. Me gustaría ir con preg_replace .. –

+1

Alexey, tal vez es un error en PHP? Tengo PHP5.3 – yegor256

0

considere el siguiente código

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

salida

good2:2 
birds:2 
young:8 girls