[英]Php, pull place holders out of a variable
我有一个包含“占位符”的变量,一旦运行就应该用db info替换。 这是用于制作通用电子邮件。
以下是变量的示例:
$emailBody = "Dear [-first_name-] [-last_name-]";
然后,我将调用db的first_name和last_name,并用适当的值替换这些占位符。
现在我的最终目标是找到这些关键术语并将其转换为:
$emailBody = "Dear John Smith";
所以我想我需要一种方法将值分解为一个数组,寻找[ - - ]然后进行修复然后使$ emailBody等于修改后的变量。 我只是很难找出如何查找每组[ - - ]。
你可以这样做:
$emailBody = "Dear [-first_name-] [-last_name-]";
$tokens = array("[-first_name-]", "[-last_name-]");
$replacements = array("John", "Doe");
$emailBody = str_replace($tokens, $replacements, $emailBody);
您可以使用str_replace函数
$emailBody = 'Dear [-first_name-] [-last_name-]';
$search = array('[-first_name-]', '[-last_name-]');
$replace = array('John', 'Smith');
$emailBody = str_replace($search, $replace, $emailBody);
将$ emailBody留作“亲爱的约翰史密斯”
这就是我通常处理邮件合并的方式。 它使用正则表达式查找[-
和-]
包含的所有字符串,然后对它可以找到的匹配项执行替换。
与str_replace()
或strtr()
解决方案的不同之处在于,它允许您查找满足[-xxx-]
任何模式,而不仅仅是您期望的模式。 你可以随意处理这个条件:
$user = new stdClass; // this may well be an array
$user->first_name = 'Jack';
$user->last_name = 'Jackson';
echo preg_replace_callback('/\[-([a-z_]*)-\]/', function($match) use ($user) {
$field = $match[1];
if (isset($user->$field)) {
return $user->$field;
}
// the field was not present, decide what to do
return ''; // or: return $match[0];
}, $emailBody);
另请参见: preg_replace_callback()
我以前给过的类似答案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.