Помогите пожалуйста!!!! В БД записано выражение с фигурными скобками: Hello {$my} world Переменная Код (Text): $my = "my little"; В переменную $str вытягивается значение с БД "Hello {$my} world", при выводе так и отображает: "Hello {$my} world", а нужно "Hello my little world" Вот что я делала: Код (Text): preg_match_all('/(?<={)(\$[0-9a-z]*)(?=})/', $str, $result); foreach($result[0] as $value) { echo $value; } Теперь в переменной $value имеется выражение "$my". Но как его заменить на переменную, чтобы при выводе отображало не "Hello {$my} world", а "Hello my little world"?? Буду очень благодарна за помощь!!!
На сколько я помню есть какая то функция, которая поменяет текст на соответствующие переменные, но я не помню как она называется.
вы шутите чтоли? Код (Text): $my = 'my little'; $my2 = 'big'; $str = 'hello {$my} and {$my2} world'; preg_match_all('|\{\$([^\}]+?)\}|', $str, $matches); foreach($matches[1] as $var) $str = str_replace('{$'.$var.'}', $$var, $str); echo $str; Добавлено спустя 1 минуту 4 секунды: главное чтобы имена переменных совпадали с тем что в фигурных скобках Добавлено спустя 1 минуту 27 секунд: хотя при желании можно сделать как угодно... Добавлено спустя 18 минут 51 секунду: Код (Text): $my = 'my little'; $my2 = 'big'; $str = 'hello {$my} and {$my2} world'; eval('$str = "'.$str.'";'); echo $str; предлагать не буду, ибо не безопасно всё это...
лол XD а теперь замени строку $str = 'hello {$my} and {$my2} world'; на бд запрос с выводом таким же текстом и попробуй..... получилось переменные активировать ? Добавлено спустя 1 минуту 40 секунд: во вторых если применяем внутренние скобки в тексте то кавычки пишим всегда ДВОЙНЫЕ " olol {$e} fgf"
не совсем понял Вашу формулровку. в строке Код (Text): $str = 'hello {$my} and {$my2} world'; обоих примеров умышленно поставлены одиночные кавычки, чтобы строка не обработалась сразу... мы ведь по условию задачи получаем строку из БД а не из статичной строки. в первом примере мы обрабатываем строку через подстановку, а во втором скармливаем строку eval'у, чтобы имитировать поведение php-строки с двойными каычками. единсвтенное, во втором варианте, я бы addslashes сделал для исходной строки, но вообще, как я и написал выше, второй враиант не безопасен.
вообще, есть еще как минимум 1 вариант решения этой задачи через другой вариант подстановки: Код (Text): $ar = array('my'=>'my little', 'my2'=>'big'); $str = 'hello {$my} and {$my2} world'; foreach($ar as $var=>$word) $str = str_ireplace('{$'.$var.'}', $word, $str); echo $str; но это уже вариации на тему первого варианта еще вариант... Добавлено спустя 13 минут 37 секунд: Код (Text): $ar = array('my'=>'my little', 'my2'=>'big'); $str = 'hello {$my} and {$my2} world'; extract($ar); eval('$str = "'.$str.'";'); echo $str; только про addslashes не надо забывать... ну и лично я не поклонник eval, хотя выглядит он всегда соблазнительно
ну мне кажется у автара надо уточнить что ему надо, всего в одном месте, поменять {$my} на соответствующею переменную или же постоянно, разные переменные менять в разных текстах.
тогда всетаки рекомендую Код (Text): $ar = array('my'=>'my little', 'my2'=>'big'); $str = 'hello {$my} and {$my2} world'; foreach($ar as $var=>$word) $str = str_ireplace('{$'.$var.'}', $word, $str); echo $str; а вот вариант с, уже ни раз упоминавшимся, preg_replace_callback Код (Text): $arr = array('my'=>'my little', 'my2'=>'big'); $str = 'hello {$my} and {$my2} world'; $str = preg_replace_callback('|\{\$([^\}]+?)\}|', function($m) use ($arr) { return $arr[$m[1]]; }, $str); echo $str;
эмм.. на меня навалилось много других заданий, но в ближайшее время мне это действие понадобиться и будут разбираться.
Всем большое спасибо, воспользовалась вот этим кодом, отлично подошел) Код (Text): $my = 'my little'; $my2 = 'big'; $str = 'hello {$my} and {$my2} world'; preg_match_all('|\{\$([^\}]+?)\}|', $str, $matches); foreach($matches[1] as $var) $str = str_replace('{$'.$var.'}', $$var, $str); echo $str;
Код (PHP): $what = array_keys($arr); $replace = array_values($arr); $str = str_ireplace($what, $replace, $str); В случае если массив вида Array('{$var1}'=>'little', '{$var2}'=>'big') Добавлено спустя 28 минут 45 секунд: Код (PHP): $str = 'hello {$my} and {$my2} world'; $arr = Array('{$my}'=>'little', '{$my2}'=>'big'); $str = str_ireplace(array_keys($arr), $arr, $str); echo $str;