2016-05-01 12 views
2

匿名のpreg_replace_callback関数の外で初期化された配列に書き込もうとしています。私は "使用"キーワードを試して、また変数 "グローバル"を宣言しても、どちらもうまくいかないようです。ここでPHPの配列への書き込みアクセスを許可するpreg_replace_callback

は私のコードです: "置き換え$" の

$headwords=array_keys($dict); 
$replaced=array(); 
// Scan text 

foreach($headwords as $index=>$headword){ 
    if(preg_match("/\b".$headword."\b/", $transcript)){ 
     $transcript=preg_replace_callback("/(\b".$headword."\b)/", function($m) use($index, $replaced){ 
      $replaced[$index]=$m[1]; 
      return "<".$index.">"; 
     }, $transcript); 
    } 
} 

のvar_dumpは空の配列としてそれを示しています。 preg_replace_callbackループは、パブリッククラス関数の一部です(違いがあれば)。

私はこの問題をGoogleで検索しましたが、成功しませんでした。 この問題の助けを借りて非常に感謝します。

+0

どのようなPHPバージョンをお使いですか? –

答えて

1

あなたはほとんどそこにいる: あなたが範囲外、それを再利用することを計画している場合useパラメータ内の参照に&$replacedに変数を追加するのを忘れ。

$transcript=preg_replace_callback("/(\b".$headword."\b)/", function($m) use($index, &$replaced){ 
     $replaced[$index]=$m[1]; 
     return "<".$index.">"; 
    }, $transcript); 
+0

ありがとう!それはトリックでした - とてもシンプルですが、ドキュメントで見つけるのは難しいです。また、$置換変数をクラス関数の内部と匿名関数の両方の中で宣言すると、それはうまくいっていますが、おそらくこれを行う良い方法ではありません。 – praine

+1

はいグローバルは極端なニーズにのみ使用する必要がありますので、喜んで助けました) –

関連する問題