2009-12-24 9 views
5

Cosa c'è di sbagliato nel mio codice:come utilizzare la modalità 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"; 

L'iteratore è vuoto, perché? Grazie per l'aiuto!

+1

Si prega di dirci di più sul vostro obiettivo/Che cosa si vuole raggiungere. Il risultato atteso per il tuo codice di esempio sarebbe un buon punto di partenza. – VolkerK

+0

Suppongo che, secondo la descrizione del manuale (RegexIterator :: REPLACE Sostituisci la voce corrente o la chiave corrente), che debba restituire tutte le chiavi corrispondenti => valori che potrebbero essere sostituiti. Non ci sono esempi nel manuale, quindi non è chiaro come usarlo e dove definire il modello di sostituzione. – Alexey

risposta

1

Se ommit la modalità di funzionamento (3 ° parametro nella tua nuova dichiarazione RegexIterator) otterrai i valori corrispondenti, in questo modo:

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

Si può giocare con le diverse modalità di funzionamento, a seconda di ciò che si volere. Vai a leggere sulla documentazione setMode: http://www.php.net/manual/en/regexiterator.setmode.php

+0

Ma se si aggiunge $ regexIterator-> setMode (RegexIterator :: REPLACE); restituisce un iteratore vuoto (come nell'esempio della domanda), quindi non è ancora chiaro come utilizzare la modalità REPLACE. – Alexey

+0

Sì, non posso dire di aver usato la modalità REPLACE con successo. Vorrei andare con preg_replace .. –

+1

Alexey, forse è un bug in PHP? Ho PHP5.3 – yegor256

0

Si consideri il seguente codice

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

uscita

good2:2 
birds:2 
young:8 girls 
Problemi correlati