-1

テンプレート ファイルを使用したいのですが、{value} をマーカーとして使用して、それを値に置き換えています。

変数は $order のように設定されており、{order} があるテンプレートで置き換えたいと考えています。

これらの変数のうち、置き換えたいものが約 50 あります。

これを自動的に行う方法はありますか?

$text = file_get_contents("bol_files/order_template.txt");
    $text = str_replace("{ordernummer}",$bestelnummer, $text);
    $text = str_replace("{verzendwijze}",$verzendwijze, $text);
    echo $text;
4

3 に答える 3

1

strtr関数を使用できます。

$text = file_get_contents("bol_files/order_template.txt");
$trans = array(
    '{ordernummer}' => $bestelnummer, 
    '{verzendwijze}'   => $verzendwijze,
    ......
);
echo strtr($text, $trans);

更新: ルールが修正されている場合 ( に置換{var_name})$var_name、正規表現の置換を使用できます。

echo preg_replace('/\{([^}]+)\}/e',  '${\'$1\'}' , $text );

例を確認してください。

追加:ただし、eマーカーは非推奨です (代わりに使用できますpreg_replace_callbackが、その方法では、これらの変数をコールバック関数のスコープにインポートする必要があります)、個別の変数ではなく配列にデータを保持する方がよいと思います。あなたが使用することができればget_defined_vars

于 2012-09-02T09:28:21.013 に答える
1

IMO、最も簡単なのは、個々の変数を使用する代わりに、最初に配列内のテンプレート変数を収集することです。次に、配列全体を単純に に渡すことができますstr_replace

上記がオプションでない場合は、使用できます

例:

$a = 'foo';
$b = 'bar';
$c = 'baz';

$template = '{a} to the {b} to the {c}';

foreach (get_defined_vars() as $key => $val) {
     if (is_scalar($val)) {
         $template = str_replace('{' . $key . '}', $val, $template);
     }
}
echo $template; // prints 'foo to the bar to the baz';

デモ

同じことを行う代替:

$a = 'foo';
$b = 'bar';
$c = 'baz';

$template = '{a} to the {b} to the {c}';

$scopeVars = array_filter(get_defined_vars(), 'is_scalar');
$templateMarker = preg_replace('/^.*$/', '{$0}', array_keys($scopeVars));
echo str_replace($templateMarker, $scopeVars, $template);

デモ

ただし、他の人にテンプレート内のテンプレート マーカーを提供させる場合、これは潜在的に安全ではないことに注意してください。現在の scope 内のget_defined_varsすべての vars を取得するため、機密データを含む可能性のあるテンプレート値ではない変数を誰かが推測しようとする可能性があります。そのリスクを評価するのはあなた次第です。

また、スコープ変数がスカラー値を保持しているかどうかを確認するチェックを追加したことにも注意してください。これは、スコープ変数にオブジェクトまたは配列がある場合、PHP はそれらを .xml ファイル内の文字列に変換できないと文句を言うからstr_replaceです。

于 2012-09-02T09:37:53.730 に答える
0

str_replace は引数として配列を取ることができます:

$text = str_replace(array_keys($replaceArray), $replacearray, $text);

$replaceArray は連想配列です

$replaceArray = (
  "{ordernummer}" => $bestelnummer,
  "{verzendwijze}" => $verzendwijze,
 and so on
);
于 2012-09-02T09:27:03.190 に答える