PHP: Как отобразить переменную (a) внутри другой переменной (b), когда переменная (b) содержит текст - PullRequest
1 голос
/ 30 ноября 2011

Я храню текст в моей базе данных.Вот следующий текст:

".$teamName.", is the name of a recently formed company hoping to take over the lucrative hairdryer design ".$sector."

После запроса к базе данных я назначаю этот текст переменной с именем $news, а затем выводим его.

Однако текст выводится на экран точнокак и выше, без замены переменных $teamName* и $sector соответствующими значениями.

Уверяю вас, что и $teamName, и $sector определены до того, как я сделаю запрос в базу данных.

Можно ли вообще делать то, что я пытаюсь сделать?

Ответы [ 6 ]

4 голосов
/ 30 ноября 2011

Возможно, вам лучше использовать sprintf() здесь.

$string = "%s is the name of a recently formed company hoping to take over the lucrative hairdryer design %s.";

$teamName = "My Company";
$sector = "sector";

echo sprintf($string, $teamName, $sector);
// My Company is the name of a recently formed company hoping to take over the lucrative hairdryer design sector.

В вашей базе данных вы храните $string. Используйте sprintf() для подстановки значений переменных.

0 голосов
/ 30 ноября 2011

Попробуйте:

$teamName = 'foo';
$sector = 'bar';
$news = $teamname . ', is the name of a recently formed company hoping to take over the lucrative hairdryer design ' . $sector '.';
echo $news;

Если вы действительно хотите отобразить двойные кавычки, попробуйте:

$news = '\"' . $teamname . '\", is the name of a recently formed company hoping to take over the lucrative hairdryer design \"' . $sector . '\".';
0 голосов
/ 30 ноября 2011

В вашей базе данных должна храниться следующая строка (немного отличающаяся от вашей):

$teamName, is the name of a recently formed company hoping to take over the lucrative hairdryer design $sector.

Затем вы можете сделать одну из двух вещей:

$news = eval('return "'.$news.'";');

...or ...

$news = str_replace(array('$teamName','$sector'),array($teamName,$sector),$news);

Или еще лучше, используйте sprintf(), где строка:

%s, is the name of a recently formed company hoping to take over the lucrative hairdryer design %s.

... и вы получите фактическое значение, подобное этому:

$news = sprintf($news, $teamName, $sector);
0 голосов
/ 30 ноября 2011

Это не так, как это работает.Если вы хотите, чтобы $teamname был оценен, вам нужно оценить его, прежде чем сохранить в базе данных.Если вам нужно, чтобы они варьировались, вы можете заменить некоторые переменные для всех переменных.

SQL: INSERT INTO ... VALUES ( 'My team has won ##num_won## games this year.')

PHP:

$string = get_string_from_sql(); // substitute for whatever method you are using to get the string.
$num_won = 16;
$string = str_replace('##num_won##', $num_won, $string);
echo $string; // Will echo My team has won 16 games this year.
0 голосов
/ 30 ноября 2011

Это дикая догадка, но вы сохранили имена переменных в базе данных, потому что, возможно, они были в одинарных кавычках и не оценивались?

$foo = 'bar';echo '$foo'; //$foo

$foo = 'bar';echo "$foo"; //bar

0 голосов
/ 30 ноября 2011

Попробуйте использовать это, я думаю: http://php.net/manual/en/function.sprintf.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...