繁体   English   中英

Php,拉出一个变量的占位符

[英]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()


我以前给过的类似答案:

如何将短代码包含到php电子邮件模板中

通过蒙版替换字符串图案的最快方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM