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

时间:2013-01-24 06:49:51

标签: php

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

以下是变量的示例:

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

然后我将调用db为first_name& last_name并用适当的值替换这些占位符。

现在我的最终目标是找到这些关键术语并将其转换为:

$emailBody = "Dear John Smith";

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

4 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

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

$tokens = array("[-first_name-]", "[-last_name-]");
$replacements = array("John", "Doe");
$emailBody = str_replace($tokens, $replacements, $emailBody);

答案 1 :(得分:1)

您可以使用str_replace function

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

$search = array('[-first_name-]', '[-last_name-]');
$replace = array('John', 'Smith');

$emailBody = str_replace($search, $replace, $emailBody);

将$ emailBody留作“亲爱的约翰史密斯”

答案 2 :(得分:0)

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

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()


我以前给过的类似答案:

How to include shortcodes into php email template

Fastest way to replace string patterns by mask

答案 3 :(得分:-1)

我想如果你每次都使用带有相同占位符的标准模板,你可以为你想要替换的每个占位符使用一个简单的str_replace。

或者,您可以获取字段列表,然后迭代它。

类似的东西:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$result = $mysqli->query("SELECT first_name, last_name FROM table WHERE id=$id");

$fieldList = $result->fetch_fields($result);
$row = $mysqli->fetch_assoc();

foreach($fieldList as $field) {
    $fieldName = $field->name
    $email_body = str_replace("[-$fieldName-]", $row[$fieldName], $email_body);
}