Ниже приведена ссылка на мой оригинальный вопрос:
PHP: Как отобразить переменную (a) внутри другой переменной (b), когда переменная (b) содержит текст
Хорошо, это еще к проблеме, все ваши предложения работают, но сейчас я ищу наиболее эффективный метод для моей конкретной проблемы.
В моей базе данных есть несколько блоков текста. Когда пользователь (описанный как $teamName
) входит на сайт, ему случайным образом присваивается один из этих блоков текста. Каждый блок текста отличается и может иметь разные переменные.
Проблема в том, что я не знаю, какой блок текста назначен пользователю без фактического просмотра базы данных или выполнения запроса. Поэтому в данный момент мне нужно запросить базу данных и выбрать $newsID
, соответствующий блоку текста, который был назначен пользователю.
Поскольку я предварительно настроил блоки текста, я знаю, что они содержат, поэтому я могу знать, что нужно сделать switch($newsID)
и, в зависимости от значения $newsID
, я затем запускаю правильные значения, вставленные в функцию sprintf()
.
Однако существует много блоков текста, поэтому будет много экземпляров case "":
и break;
. Я хочу, чтобы сайт работал так, чтобы, если на каком-то этапе я изменил блок текста на что-то другое, переменные в sprintf () автоматически обновлялись, а не я вручную обновлял sprintf()
в switch()
case:
.
Извините за длинный пост, надеюсь, это имеет смысл.
EDIT:
У меня есть предопределенных блоков текста в моей базе данных в моей таблице teamNews:
Для $newsID = 1
:
"$teamName is the name of a recently formed company hoping to take over the lucrative hairdryer design
$sector"
Для $newsID = 2
:
"The government is excited about the potential of ".$teamName.", after they made an annoucement that they have hired $HoM"
Для $newsID = 3
:
"It is rumored that $teamName are valuing their hairdryer at $salePrice. People are getting excited.
Когда пользователь ($teamName
) входит в игру, ему случайным образом присваивается один из этих блоков текста с $newsID
из 1,2 или 3.
Допустим, пользователю назначен блок текста с $newsID
= 2. Так что теперь его имя пользователя ($teamName
) вставляется в базу данных в той же строке, что и выбранный текст.
Теперь я хочу отобразить текст, соответствующий этому пользователю, поэтому я делаю следующее:
$news = news ($currentStage,$teamName);
switch ($ID)
{
case "1":
sprintf($teamName,$sector)
echo $news."<br/><hr/>";
break;
case "2":
sprintf($teamName,$Hom)
break;
case "3":
sprintf($teamName,$saleprice)
break;
}
$currentStage--;
}
С функцией
function news($period,$teamName)
{
$news = mysql_query("
SELECT `content`,`newsID` FROM `teamnews` WHERE `period` = '$period' && `teamName` = '$teamName'
") or die($news."<br/><br/>".mysql_error());
$row = mysql_fetch_assoc($news);
$news = $row['content'];
$ID = $row ['newsID'];
return $news,$ID;
}
Проблема в том, что в действительности существует около 20 различных блоков текста, которые могут быть назначены пользователю. Так что у меня будет много case:
.
Также, если я хочу изменить все текстовые блоки в базе данных, мне также придется вручную изменить все переменные в sprintf
в каждом `` случае: `
Мне интересно, есть ли лучший способ сделать это, чтобы, если я изменю текст в базе данных, параметры, переданные в sprintf
, соответственно изменились.
Так что, если я использую
$replaces = array(
'teamName' => 'Bob the team',
'sector' => 'murdering',
'anotherSector' => 'giving fluffy bunnies to children'
);
возможно ли это сделать:
$replaces = array(
'$teamName' => '$teamName',
'$sector' => '$sector',
'$anotherSector' => '$anothersector'
);