Получить совпадения из preg_replace и использовать их в качестве ключа массива - PullRequest
0 голосов
/ 18 мая 2019

Я хочу получить совпадения из строки и использовать их в массиве в качестве ключа, чтобы изменить значение в строке на значение массива.

Если бы это было проще реализовать, я могу изменить теги фэнтези с%! также ни к чему не имеет проблем в JS / jQuery. Этот скрипт предназначен для внешних файлов JS и изменяет некоторые переменные, к которым я не могу получить доступ из JS / jQuery. Поэтому я хочу вставить их с помощью PHP и отправить их в уменьшенном виде и сжать в браузер.

$array = array ( 'abc' => 'Test', 'def' => 'Variable', 'ghi' => 'Change' );
$string ='This is just a %!abc!% String and i wanna %!ghi!% the %!def!%';

$string = preg_replace('%!(.*?)!%',$array[$1],$string);
echo $string;

1 Ответ

1 голос
/ 18 мая 2019

Вы можете использовать array_map с preg_quote, чтобы превратить ключи вашего массива в регулярные выражения, а затем использовать значения массива в качестве строк замены в форме массиваиз preg_replace:

$array = array ( 'abc' => 'Test', 'def' => 'Variable', 'ghi' => 'Change' );
$string ='This is just a %!abc!% String and i wanna %!ghi!% the %!def!%';
$regexes = array_map(function ($k) { return "/" . preg_quote("%!$k!%") . "/"; }, array_keys($array));
$string = preg_replace($regexes, $array, $string);
echo $string;

Вывод:

This is just a Test String and i wanna Change the Variable

Демонстрация на 3v4l.org

...