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;

もちろん、この例では常に「Today is 1」と表示されます。「Today is 1」「Today is 17」と表示してほしいです。明示的でない変数で myString を保存できますか?

4

5 に答える 5

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 に答える
3

sprintf()を使用してフォーマットを保存します。

于 2012-12-21T13:10:01.363 に答える
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

これが最善の方法かどうかはわかりませんが、うまくいきます。行を文字列として保存し、 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 に答える
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 に答える