Заменить preg_replace () - совпадение с значением массива с помощью ключа [duplicate]

Интерфейс подобен контракту, в котором вы хотите, чтобы ваш класс реализации реализовал методы, написанные в контракте (интерфейс). Поскольку Java не предоставляет множественное наследование, программирование для интерфейса является хорошим способом достижения цели множественного наследования. Если у вас есть класс A, который уже расширяет какой-либо другой класс B, но вы хотите, чтобы класс A также следовал определенным рекомендациям или реализовывал определенный контракт, тогда вы можете сделать это путем программирования стратегии интерфейса.

1
задан llanato 2 September 2015 в 21:44
поделиться

3 ответа

Вы можете использовать preg_replace_callback и использовать группу захвата ([^}]+), чтобы найти индекс в массиве $text:

$repl = preg_replace_callback('/{{([^}]+)}}/', function ($m) use ($text) {
            return $text[$m[1]]; }, $body);
//=> This is a body of really cool text from a book.

Оператор use ($text) передает ссылку $text к анонимному function.

5
ответ дан l'L'l 22 August 2018 в 01:47
поделиться

Просто для удовольствия, используя ваш массив как есть:

$result = str_replace(array_map(function($v){return '{{'.$v.'}}';}, array_keys($text)),
                      $text, $body);

Или, если ваш массив похож на $text['{{some_text}}'], тогда просто:

$result = str_replace(array_keys($text), $text, $body);
0
ответ дан AbraCadaver 22 August 2018 в 01:47
поделиться

Как сделать это наоборот - вместо поиска всех {{...}} заполнителей и поиска их значений, итерации по всем значениям и замены заполнителей, которые соответствуют следующим образом:

foreach ($text as $key => $value) {
    $placeholder = sprintf('{{%s}}', $key);
    $body        = str_replace($placeholder, $value, $body);
}

Вы можете даже включите его в функцию:

function populatePlaceholders($body, array $vars)
{
    foreach ($vars as $key => $value) {
        $placeholder = sprintf('{{%s}}', $key);
        $body        = str_replace($placeholder, $value, $body);
    }

    return $body;
}
1
ответ дан Andris 22 August 2018 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: