我试图在我的HTML电子邮件模板中替换%filename%。我尝试做的是发送电子邮件,例如已上传哪些文件的通知。如果我在同一个文档中包含所有内容,但是当我尝试在HTML电子邮件模板中替换%filename%时,它就可以工作。
这非常有效:
$date = date("d.m.Y");
$message = str_replace('%date%', $date, $message);
但是,当我尝试对上传的所有文件执行此操作时,我遇到了问题。我确定无法执行此操作,但如何设置将%filename%替换为上传的所有文件的文件名?这就是我试图做的,当然 - 没有运气;
$filename = for($i = 0; $i < count($data['data']['metas']); $i++) {
echo '<li>' . $data['data']['metas'][$i]['name'] . '</li>';
}
$message = str_replace('%filename%', $filename, $message);
正如您所看到的,我希望在我的HTML模板中使用li这样的所有文件名而不是%filename%;
<li>filename1</li>
<li>filename2</li>
<li>filename3</li>
感谢您的帮助。
答案 0 :(得分:3)
$filename = '';
for($i = 0; $i < count($data['data']['metas']); $i++) {
$filename .= '<li>' . $data['data']['metas'][$i]['name'] . '</li>';
}
$message = str_replace('%filename%', $filename, $message);
答案 1 :(得分:2)
这是一个可能反映您思考的替代答案。您正在尝试遍历数组并从循环返回结果。虽然您的语法错误,但您可以查看array_map,它可以为数组的每个元素调用您选择的函数。
因此,我们可以创建一个函数,它接受一个文件元数据数组并将名称格式化为列表元素
function listify($meta) {
return '<li>'.htmlentities($meta['name']).'</li>';
}
现在我们可以使用array_map
的回调来构建我们的列表。当array_map
返回一个数组时,我们需要implode
将它重新转换为常规字符串:
$filelist=implode('', array_map('listify', $data['data']['metas']));
您可以将其合并为一个语句,为了清晰起见,我将其分开。