我有一个这样的数组:
$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吗?
答案 0 :(得分:3)
使用sprintf()并保存格式。
答案 1 :(得分:3)
使用printf
$myString = "Today is %s";
$today = '21/12/2012';
printf($myString,$today); // Today is 21/12/2012
$today = 21;
printf($myString,$today); // Today is 21
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 />";
}
答案 2 :(得分:1)
我可以使用不明确的变量保存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);
}
}
用法(Demo):
$gg = 1;
$myString = new MyStringVariable("Today is %s\n", [&$gg]);
echo $myString;
$gg = 17;
echo $myString;
输出:
Today is 1
Today is 17
这基本上可以通过将vsprintf
(请参阅sprintf
)包装到它自己的对象中来实现,该对象还存储您想要使用的变量引用。 magic __toString
method负责在需要时解析输出。
答案 3 :(得分:0)
$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);
}
答案 4 :(得分:0)
我不知道这是不是最好的方式,但它有效, 将行保存为字符串,然后使用eval()转换为变量
$list = array (
'Today is ".$aaaa."/".$mm."/".$gg'
);
$aaaa = 2012;
$mm = 11;
$gg = 00;
eval("\$mylist = \"$list[0];");
echo $mylist;
快乐的编码!!