2010-12-18 7 views
0

このスクリプトは、テキストのすべての行に "FIRST"と "LAST"の単語があるかどうかを確認し、$temp_namesのエントリで置き換えようとしています。preg_replace_callbackのクロージャに関する問題

$temp_names = array('FIRST' => array('John','Jack'),'LAST' => array('Doe','Smith')); 

for ($i=0; $i < count($lines); $i++) 
{ 
    $lines[$i] = preg_replace_callback("/FIRST|LAST/", 
             function($matches) use ($temp_names){ 
             return array_shift($temp_names[$matches[0]]); }, $lines[$i]); 

} 

私は、閉鎖機能にreturn array_shift()に問題があります。最初のエントリが正しく返されますが、エントリは配列内にとどまります。だから毎回 "John"と "Doe"を返します。何故ですか?

ありがとうございました。 (そのような値をシフトなど)$temp_names配列に変更を持っているために、

答えて

2

は、あなたが

function ($matches) use (&$temp_names) 
+0

ああ、私の悪いように参照することによりuseそれをする必要があります。今それは働いた。ありがとう! – nukl