我有一个包含“占位符”的变量,一旦运行就应该用db info替换。这是用于制作通用电子邮件。
以下是变量的示例:
$emailBody = "Dear [-first_name-] [-last_name-]";
然后我将调用db为first_name& last_name并用适当的值替换这些占位符。
现在我的最终目标是找到这些关键术语并将其转换为:
$emailBody = "Dear John Smith";
所以我想我需要一种方法将值分解为一个数组,寻找[ - - ]然后进行修复然后使$ emailBody等于修改后的变量。我只是很难弄清楚如何查找每组[ - - ]。
答案 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);
我以前给过的类似答案:
答案 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);
}