如何保存变量不显式的PHP字符串?
我有这样一个数组:如何保存变量不显式的PHP字符串?,php,string,variables,date,internationalization,Php,String,Variables,Date,Internationalization,我有这样一个数组: $list = array ( "Today is ".$aaaa."/".$mm."/".$gg, "Oggi è il ".$gg."/".$mm."/".$aaaa, "Aujourd'hui, c'est ".$gg."/".$mm."/".$aaaa ); 我想将它们保存在数据库中(变量不显式),然后以php格式重新使用它们。 是否可以将php格式的字符串另存为字符串 例如: $gg = 1; $myString = "Today is ".$gg;
$list = array (
"Today is ".$aaaa."/".$mm."/".$gg,
"Oggi è il ".$gg."/".$mm."/".$aaaa,
"Aujourd'hui, c'est ".$gg."/".$mm."/".$aaaa
);
我想将它们保存在数据库中(变量不显式),然后以php格式重新使用它们。
是否可以将php格式的字符串另存为字符串
例如:
$gg = 1;
$myString = "Today is ".$gg;
echo $myString;
$gg = 17;
echo $myString;
当然,这个例子总是显示“今天是1”。
我想让它显示“今天是1”,“今天是17”。
我可以用不明确的变量保存myString吗?使用并保存格式。使用
printf
将直接输出字符串。
sprintf
将返回它
编辑:在您的特定情况下,您应该指定订单
$list = array (
'Today is %1$s/%2$s/%3$s',
'Oggi è il %3$s/%2$s/%1$s',
'Aujourd\'hui, c\'est %3$s/%2$s/%1$s'
);
foreach($list as $string) {
printf($string,"2012","12","21");
echo " <br />";
}
$list=array(
'今天是%1$s/%2$s/%3$s',
“Oggièil%3$s/%2$s/%1$s”,
'Aujourd'hui,c'est%3$s/%2$s/%1$s'
);
foreach($列为$string){
printf($string,“2012”、“12”、“21”);
回声“
”;
}
但是,对于本地化,我会将函数用于简单字符串,并(使用setlocale)用于本地化日期
$sql = 'My var is %s';
$a = 100;
$foo = sprintf($sql, $a);
编辑1强>
$list = array(
"Today is %s/%s/%s",
"Oggi è il %s/%s/%s",
"Aujourd'hui, c'est %s/%s/%s"
);
foreach ($list as $str)
{
$a = 2012;
$m = 12;
$g = 17;
if (strstr($str, 'Today '))
$foo = sprintf($str, $a, $m, $g);
else
$foo = sprintf($str, $g, $m, $a);
}
我可以用不显式的变量保存myString吗
有点,是的。您可以实现以下功能:
class MyStringVariable
{
private $mask;
private $variables;
public function __construct($mask, array $variables) {
$this->mask = $mask;
$this->variables = $variables;
}
public function __toString() {
return vsprintf($this->mask, $this->variables);
}
}
用法():
输出:
Today is 1
Today is 17
这基本上是通过将
vsprintf
(请参见)包装到它自己的对象中来实现的,该对象还存储了要使用的变量引用。在需要时,解决输出问题。我不知道这是否是最好的方法,但它很有效,
将行保存为字符串,然后使用eval()转换为变量
$list = array (
'Today is ".$aaaa."/".$mm."/".$gg'
);
$aaaa = 2012;
$mm = 11;
$gg = 00;
eval("\$mylist = \"$list[0];");
echo $mylist;
快乐编码 试试看,看起来你在寻找国际化。保留datetime对象和要支持的国家/地区的格式说明符。
$gg
、$mm
和$aaaa
通常只会妨碍您。如果变量顺序不同,如何处理for循环?(见问题中的数组)
Today is 1
Today is 17
$list = array (
'Today is ".$aaaa."/".$mm."/".$gg'
);
$aaaa = 2012;
$mm = 11;
$gg = 00;
eval("\$mylist = \"$list[0];");
echo $mylist;