Консультация № 52986
23.08.2006, 10:52
0.00 руб.
0 4 4
Привет всем экспертам! У меня к Вам вопрос: есть строка вида "какойтотекст$x1текст$x2...". Т.е содержит текст и названия переменных. Она получена динамически(загружена из файла например). Можно ли как-нибудь заменить подстроки $xi на реальные значения соответствующих переменных? Причем все автоматически? Названия переменных конечно не пронумерованы.

Обсуждение

Неизвестный
23.08.2006, 11:01
общий
это ответ
Здравствуйте, Alexius!

Можно. Вы можете вызвать функцию eval, которая исполнит переданную ей строку как PHP код.
Т.е. можно так:
<?
...
$s=‘$str=какойтотекст$x1текст$x2‘;
eval($s);
echo $str;
...
?>

если код что-о выводит, то вывод будет перенаправлен в браузер (или в открытый активный буфер)
Неизвестный
23.08.2006, 13:28
общий
это ответ
Здравствуйте, Alexius!
Функчия eval более медленная чем include(), можно вывести текст вот так:

include(‘Ваш текст.txt‘);
Сам текст должен выглядеть вот так -
текст текст текст <?=$x1?> текст текст текст <?=$x2?> <?=$x2?>текст текст текст
<?=$x...?>.......

Неизвестный
23.08.2006, 18:32
общий
это ответ
Здравствуйте, Alexius!
Ответ лежит на поверхности. ПХП развернет Ваши переменные и в том виде в каком вы его употребили в вопросе. те
есть переменная $x1 и пусть она равна $x1 = " ЗНАЧЕНИЕ ПЕРВОЙ ПЕРЕМЕННОЙ "
соответственно $x2 = " ЗНАЧЕНИЕ ВТОРОЙ ПЕРЕМЕННОЙ " и ежели мы какой то третей переменной пусть это будет $x3 присвоим значение "какойтотекст$x1текст$x2..."

$x3 = "какойтотекст$x1текст$x2..."

то в ней будет строка следущего вида

"какойтотекст ЗНАЧЕНИЕ ПЕРВОЙ ПЕРЕМЕННОЙ текст ЗНАЧЕНИЕ ВТОРОЙ ПЕРЕМЕННОЙ ..."

честно слово :)
Неизвестный
23.08.2006, 19:46
общий
это ответ
Здравствуйте, Alexius!
В общем виде можно сделать так (см. приложение), переменная может состоять из символов a-z0-9 и символа подчеркивание, после переменной должен идти хотя бы один символ, которых не входит в набор a-z0-9 и "_", хотя бы просто пробел. Возможно в приложении код вставится криво и не будет работать, тогда отпишитесь в ПМ.

Приложение:
<?php$b=‘5‘;$d=‘4‘;$f=‘3‘;$a=‘testing $b on $d in $f at $f‘;echo preg_replace("/\\\$([\w\d_]+)/ie","$\\1",$a);// выведет// testing 5 on 4 in 3 at 3?>
Форма ответа