2017-02-26 79 views
1

我试图在我的HTML电子邮件模板中替换%filename%。我想要做的是发送一封电子邮件,例如通知上传了哪些文件。如果我在同一个文档中拥有所有内容,但是当我尝试在我的HTML电子邮件模板中替换%filename%时,它将起作用。结果为一个字符串的PHP

这完美的作品:

$date = date("d.m.Y"); 
$message = str_replace('%date%', $date, $message); 

然而,当我尝试上传的所有文件要做到这一点,我遇到的问题。我确信我无法做到这一点,但我怎样才能设法将%filename%替换为上传的所有文件的文件名?这是我试图做的,当然 - 没有运气;正如你所看到的,我希望所有的文件名与li一样列在这里,而不是%我的HTML模板中的%filename%;

<li>filename1</li> 
<li>filename2</li> 
<li>filename3</li> 

感谢您的任何帮助。

+0

'$ filename = for'的语法是错误的。您不能将for循环设置为变量的值。 – Martin

回答

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); 
+0

这样做。没想到这一点。谢谢! – zorensen

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'])); 

您可以将它变成一个语句,我刚刚分开它的清晰度。

+0

伟大的提示和伟大的思想。这也是非常有用的。谢谢! – zorensen

相关问题