PHP结果为一个字符串

时间:2017-02-26 19:17:17

标签: php arrays string replace

我试图在我的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>

感谢您的帮助。

2 个答案:

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

您可以将其合并为一个语句,为了清晰起见,我将其分开。