PHP: как отобразить переменную (a) внутри другой переменной (b), когда переменная (b) содержит текст

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

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

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

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

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

Возможно ли сделать то, что я пытаюсь сделать?

Возможно, вам будет лучше использовать 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() для замены значений переменных.

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

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

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

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

Это не так, как это работает. Если вы хотите $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. 

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

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

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

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

…или…

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

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

 $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 . '\".';