Разрешить доступ на запись в массив в PHP preg_replace_callback

Я пытаюсь записать в массив, который был инициализирован вне анонимной функции preg_replace_callback. Я пробовал ключевое слово "use", а также объявил переменную "global", но ни один из них, похоже, не работает.

Вот мой код:

$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 со значением "$ replace" показывает его как пустой массив. Цикл preg_replace_callback является частью функции открытого класса, если это имеет какое-либо значение.

Я пытался найти эту проблему, но безуспешно. Очень благодарен за любую помощь с этой проблемой.

1 ответ

Решение

Вы почти у цели: забыли добавить ссылку & в $replaced переменная внутри use Параметр, если вы планируете использовать его за пределами области действия.

   $transcript=preg_replace_callback("/(\b".$headword."\b)/", function($m) use($index, &$replaced){
        $replaced[$index]=$m[1];
        return "<".$index.">";
    }, $transcript);
Другие вопросы по тегам