2016-06-14 2 views
0
$str = "Hello {{name}} welcome to {{company_name}}"; 

$array = ['name' => 'max', 'company_name' => 'Stack Exchange']; 

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

Hello max welcome to Stack Exchange 
+0

это работа для preg_replace_callback – splash58

+0

спасибо за Ваш ответ вы можете дать мне пример – user3736833

+0

Если ваша цель была печать, а не получать строку, попробуйте 'эхо«Hello». $ Имя.« Добро пожаловать на сайт». $ Компании ; ' –

ответ

1

Сначала создайте новый массив с поиском полей, завернутая в фигурных скобках:

$searchArray = array_map(function($value) { 
    return "{{" . $value . "}}"; 
}, array_keys($array)); 

Теперь у вас есть массив с токенами вы ищете, и у вас уже есть массив значений, которые вы хотите заменить токенами.

Так просто сделать простой str_replace:

echo str_replace($searchArray, $array, $str); 

Рабочий пример: https://3v4l.org/8tPZt


Вот аккуратный маленькая функция, вместе взятые:

function fillTemplate($templateString, array $searchReplaceArray) { 
    return str_replace(
     array_map(function($value) { return "{{" . $value . "}}"; }, array_keys($searchReplaceArray)), 
     $searchReplaceArray, 
     $templateString 
    ); 
} 

Теперь вы можете назвать это как это:

echo fillTemplate(
    "Hello {{name}} welcome to {{company_name}}", 
    ['name' => 'max', 'company_name' => 'Stack Exchange'] 
); 

// Hello max welcome to Stack Exchange 

Пример: https://3v4l.org/rh0KX

+0

благодарю вас за ваш ответ. – user3736833

0

Checkout это хорошая функция PHP: http://php.net/manual/de/function.strtr.php Вы можете найти там примеры и объяснение.

$str = "Hello {{name}} welcome to {{company_name}}"; 

$array = ['{{name}}' => 'max', '{{company_name}}' => 'Stack Exchange']; 

print strtr ($str, $array); 
+0

Зачем OP« попробуйте это »? *** Хороший ответ *** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. –

+0

ОК, тогда ... я меняю его – JustOnUnderMillions

+0

Хорошее редактирование, но вы его не объясняете. –

Смежные вопросы