2

我有一个这样的数组:

$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 吗?

4

5 回答 5

3

使用sprintf()并保存格式。

于 2012-12-21T13:10:01.363 回答
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 />";
}

但是对于本地化,我会使用setlocale函数来处理简单的字符串,而strftime(带有 setlocale)来处理本地化日期

于 2012-12-21T13:17:01.843 回答
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);
    }
}

用法(演示):

$gg = 1;
$myString = new MyStringVariable("Today is %s\n", [&$gg]);
echo $myString;

$gg = 17;
echo $myString;

输出:

Today is 1
Today is 17

vsprintf这基本上是通过将(请参阅)包装sprintf到它自己的对象中来工作的,该对象还存储您要使用的变量引用。魔术__toString方法负责在需要时解析输出。

于 2012-12-21T13:26:34.790 回答
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);
}
于 2012-12-21T13:20:46.197 回答
0

我不知道这是否是最好的方法,但它有效,您将行保存为字符串,然后使用 eval() 转换为变量

$list = array (
    'Today is ".$aaaa."/".$mm."/".$gg'
);
$aaaa = 2012;
$mm = 11;
$gg = 00;
eval("\$mylist = \"$list[0];");
echo $mylist;

快乐编码!

于 2012-12-21T13:39:59.807 回答