PHP快速替换字符间字符串内内容的方法

PHP快速替换字符间字符串内内容的方法,php,variables,str-replace,Php,Variables,Str Replace,在创建自动电子邮件时,需要将电子邮件的某些部分替换为存储的数据 亲爱的%first\u name%%names%,感谢您参加%place\u name% 这可以用字符串替换来完成,但是必须有一个更快的方法 假设变量名与我们希望从系统中获得的相同,例如,%first\u name%应替换为$user['first\u name']等…您可以使用数组值替换%之间的键: $fields = array('first_name' => 'Tim', 'place_name' => 'Cana

在创建自动电子邮件时,需要将电子邮件的某些部分替换为存储的数据

亲爱的
%first\u name%%names%
,感谢您参加
%place\u name%

这可以用字符串替换来完成,但是必须有一个更快的方法

假设变量名与我们希望从系统中获得的相同,例如,
%first\u name%
应替换为
$user['first\u name']
等…

您可以使用数组值替换
%
之间的键:

$fields = array('first_name' => 'Tim', 'place_name' => 'Canada');

$string = preg_replace_callback('/%(.+?)%/', function($arr) use($fields)
{
    $key = $arr[1];
    return array_key_exists($key, $fields) ? $fields[$key] : $arr[0];
}, $string);
您可以使用数组值替换
%
之间的键:

$fields = array('first_name' => 'Tim', 'place_name' => 'Canada');

$string = preg_replace_callback('/%(.+?)%/', function($arr) use($fields)
{
    $key = $arr[1];
    return array_key_exists($key, $fields) ? $fields[$key] : $arr[0];
}, $string);
一种选择:

$vars = array(
  'firstname' = 'Bob',
  'surname' = 'Dole',
  'place' = 'Las Vegas',
  // ...
);
extract($vars);
include('my_template.phtml');
在my_template.phtml中:

<?php
echo <<<EOF
    Dear $firstname $surname,<br>
    Thank you for attending the Viagra and Plantains Expo in $place.
EOF;
?>

如果在使用时担心名称冲突,则始终可以使用
EXTR\u PREFIX\u ALL
选项或其他提取方法之一

或者,更好的是,不要重新发明轮子。只要使用或

另请参见此问题:

一个选项:

$vars = array(
  'firstname' = 'Bob',
  'surname' = 'Dole',
  'place' = 'Las Vegas',
  // ...
);
extract($vars);
include('my_template.phtml');
在my_template.phtml中:

<?php
echo <<<EOF
    Dear $firstname $surname,<br>
    Thank you for attending the Viagra and Plantains Expo in $place.
EOF;
?>

如果在使用时担心名称冲突,则始终可以使用
EXTR\u PREFIX\u ALL
选项或其他提取方法之一

或者,更好的是,不要重新发明轮子。只要使用或


另请参见此问题:

巧妙地使用闭包,这需要更新版本的PHP@Kristian:PHP5.3,引入匿名函数语法的版本,3年前发布。我不认为它是新的,我希望每个人都升级到至少那个版本。永远不要低估代码/版本要求的力量来有力地减慢从巧妙地使用闭包的升级,这需要更新的版本。PHP@Kristian:PHP 5.3,引入匿名函数语法的版本,三年前发行的。我不认为它是新的,我希望每个人都升级到至少那个版本。永远不要低估代码/版本要求的力量来有力地减缓从1发生的升级。这就是我在输出视图时所做的,我建议。it@Kristian:是的,CakePHP和其他很多框架/库可能都是这样做的,尽管通常都有额外的功能,比如输出缓冲,在Cake 2.0中还有视图块和视图继承it@Kristian:是的,CakePHP和很多其他框架/库都是这样做的,尽管通常有额外的特性,如输出缓冲,在Cake 2.0中还有视图块和视图继承。