1

我有一个包含“占位符”的变量,一旦运行就应该用 db info 替换。这是用于制作通用电子邮件。

这是变量的示例:

$emailBody = "Dear [-first_name-] [-last_name-]";

然后,我将为 first_name 和 last_name 调用数据库,并将这些占位符替换为适当的值。

现在我的最终目标是找到这些关键术语并将它们变成:

$emailBody = "Dear John Smith";

所以我想我需要一种方法将值分解为一个数组以查找 [- -] 然后进行修复,然后使 $emailBody 等于修改后的变量。我只是很难弄清楚如何查找每组 [- -]。

4

3 回答 3

2

您可以执行以下操作:

$emailBody = "Dear [-first_name-] [-last_name-]";

$tokens = array("[-first_name-]", "[-last_name-]");
$replacements = array("John", "Doe");
$emailBody = str_replace($tokens, $replacements, $emailBody);
于 2013-01-24T06:52:18.307 回答
1

您可以使用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 保留为“Dear John Smith”

于 2013-01-24T07:05:17.713 回答
0

这就是我通常处理邮件合并的方式。它使用正则表达式查找所有由[-and包围的字符串-],然后对它可以找到的匹配项执行替换。

str_replace()orstrtr()解决方案的区别在于它允许您找到任何满足的模式[-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 电子邮件模板中包含简码

用掩码替换字符串模式的最快方法

于 2013-01-24T06:56:03.080 回答