Каков наилучший способ разбора строки для вставки переменных?

1

У меня есть строка вроде этого:
"Hello, я am $name, it nice to meet $noun".

Он поступает непосредственно из базы данных, а $ сбегает. У меня также есть массив вроде этого:
[ 'name' => "Jawsh", 'noun' => "you" ]

Как заменить переменные в $string на значение соответствующих данных массива?

  • 1
    Возможно, вы используете str_replace () ? $myString = str_replace(array_keys($myArray), $myArray, $myString); хотя вы не говорите, как экранировать $
  • 2
    Вы что-нибудь пробовали?
Показать ещё 2 комментария
Теги:

4 ответа

2
Лучший ответ

Я бы сделал так:

$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] * '

http://php.net/manual/en/language.variables.basics.php

  • 0
    Мне это очень нравится. Я играл с preg replace loop, но это может отнять у вас торт.
0

Вы можете использовать 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

  • 4
    Модификатор / e устарел, вместо него используйте preg_replace_callback (устарел в php 5.5.x)
0

Попробуй это:

$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);
0

Простой пример с extract() и eval():

extract($variables);
eval('$string = "' . $string . '";');

demo

Ещё вопросы

Сообщество Overcoder
Наверх
Меню