在创建自动电子邮件时,需要用存储的数据替换电子邮件的某些部分。PHP快速替换字符之间字符串的内容
例如。亲爱的%first_name% %surname%
,感谢您参加%place_name%
。
这可以用替换每个字符串的字符串来完成,但必须有更快的方法。
假设变量名称与我们想要从系统中获得的相同,例如。 %first_name%
应$user['first_name']
等来代替....
在创建自动电子邮件时,需要用存储的数据替换电子邮件的某些部分。PHP快速替换字符之间字符串的内容
例如。亲爱的%first_name% %surname%
,感谢您参加%place_name%
。
这可以用替换每个字符串的字符串来完成,但必须有更快的方法。
假设变量名称与我们想要从系统中获得的相同,例如。 %first_name%
应$user['first_name']
等来代替....
可以利用preg_replace_callback
与数组值%
的之间的替换键:
$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;
?>
I如果您在使用extract()
时担心名称冲突,则可以始终使用EXTR_PREFIX_ALL
选项或其他提取方法之一。
或者,更好的是,不要重新发明轮子。只需使用Smarty或mustache.php即可。
+1这是我如何处理输出视图,并且我推荐它 – Kristian 2012-07-30 16:12:49
@Kristian:是的,CakePHP以及可能还有很多其他框架/库它通过这种方式,尽管通常具有其他功能,如输出缓冲,并在Cake 2.0中查看块和视图继承。 – 2012-07-30 16:33:44
巧妙地利用封闭的,这需要PHP – Kristian 2012-07-30 16:12:20
的新版本@Kristian:PHP 5.3,这是引入了匿名函数语法的版本,被释放3年前。我不认为它更新,我希望每个人都升级到至少该版本。 – 2012-07-30 16:16:15
永远不要低估代码/版本要求的力量,以强制减慢升级的发生 – Kristian 2012-07-30 16:27:51