У меня есть строка вроде этого: "Hello, я am $name, it nice to meet $noun".
Он поступает непосредственно из базы данных, а $
сбегает. У меня также есть массив вроде этого: [ 'name' => "Jawsh", 'noun' => "you" ]
Как заменить переменные в $string
на значение соответствующих данных массива?
Я бы сделал так:
$string = "Hello, I am \$name, it nice to meet \$noun.";
$array = array('name' => "Jawsh",'noun' => "you");
echo preg_replace_callback('/\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/', function($match) use ($array) {
if (isset($array[$match[1]])) {
return $array[$match[1]];
}
return $match[0];
}, $string);
Имена переменных следуют тем же правилам, что и другие метки в PHP. Правильное имя переменной начинается с буквы или подчеркивания, за которой следует любое количество букв, цифр или символов подчеркивания. В качестве регулярного выражения оно выражается следующим образом: "[a-zA-Z_\x7f-\xff] [a-zA-Z0-9 _\x7f-\xff] * '
Вы можете использовать preg_replace()
в сочетании с флагом /e
для достижения этого:
$string = "Hello, I am \$name, it nice to meet \$noun";
$replacements = array('name' => 'Jawsh', 'noun' => 'you');
$result = preg_replace('/\$([a-z]+)/e', '$replacements["$1"]', $string);
print $result;
Вышеприведенное будет распечатывать Hello, я am Jawsh, it nice to meet you
Попробуй это:
$string = "Hello, I am $name, it nice to meet $noun.";
$array = [
'name' => "Jawsh",
'noun' => "you"
]
$string = str_replace('$name', $array['name'], $string);
$string = str_replace('$noun', $array['noun'], $string);
Простой пример с extract()
и eval()
:
extract($variables);
eval('$string = "' . $string . '";');
If eval() is the answer, you're almost certainly asking the wrong question.
$myString = str_replace(array_keys($myArray), $myArray, $myString);
хотя вы не говорите, как экранировать$