0

私はこのテキストを持っています:

$text = "Welcome {name}, this is your email address: {email}";

{name} タグと {email} タグを 1 つずつではなく、一度に置き換えたいstr_replace("{name}","John",$text)

私はすでにこの方法で置換出力を持っています:

$values_to_replace = array('name'=>'John','email'=>'blabla@gmail.com');

指定された を使用して 1 つのショットからテキスト全体を置き換えるにはどうすればよい$values_to_replaceですか?

4

3 に答える 3

2

置換するテキストに一致するように配列キーを変更できるため、次のように簡単です。

$values_to_replace = array('{name}'=>'John','{email}'=>'blabla@gmail.com');
$text = str_replace(array_keys($values_to_replace), $values_to_replace, $text);

または、セバスチャンが示したように。

あなたのコメントに答えるにはいくつかの方法がありますが、セバスチャンはその 1 つです。ここに別のものがあります:

$search = explode(',', '{'.implode('},{', array_keys($values_to_replace)).'}');
$text = str_replace($search, $values_to_replace, $text);
于 2013-11-12T18:53:02.033 に答える
2

以下にいくつかの方法を示します。

まずはstrtr()です。key=>value 配列を取り、出現するすべてのキーを値に置き換えます。

$values = array('name'=>'John','email'=>'blabla@gmail.com');
$text = "Welcome {name}, this is your email address: {email}";

$replacements = array();
foreach ($values as $name => $value) {
  $replacements['{'.$name.'}'] = $value;
}
var_dump(strtr($text, $replacements));

2 番目の str_replace() は、$search 引数と $replace 引数の両方で配列をサポートします。

$values = array('name'=>'John','email'=>'blabla@gmail.com');
$text = "Welcome {name}, this is your email address: {email}";  

$search = array_map(
  function($placeholder) {
    return '{'.$placeholder.'}';
  },
  array_keys($values)
);
var_dump(str_replace($search, $values, $text));

すべての {something} の発生を処理したい場合、3 番目のオプションは興味深いものです。これには正規表現とロジックが必要なため、preg_replace_callback が必要です。

$values = array('name'=>'John','email'=>'blabla@gmail.com');
$text = "Welcome {name}, this is your email address: {email}";      

$replacer = function($match) use ($values) {
  if (isset($values[$match['name']])) {
    return $values[$match['name']];
  } else {
    return '';
  }
};
var_dump(preg_replace_callback('(\\{(?P<name>[a-z\d]+)\\})i', $replacer, $text));
于 2013-11-12T19:09:28.163 に答える
1

str_replaceパラメータとして配列を取ることができます:

$text = "Welcome {name}, this is your email address: {email}";

$from = array("{name}", "{email}");
$to = array("John", "blabla@gmail.com");

$new_text = str_replace( $from , $to, $text );
于 2013-11-12T18:51:23.063 に答える