Разрешить доступ на запись в массив в 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);