【问题标题】:PHP for result into one stringPHP 将结果转换为一个字符串
【发布时间】:2017-07-17 07:32:24
【问题描述】:

我正在尝试替换我的 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>

感谢您的帮助。

【问题讨论】:

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

标签: php arrays string replace


【解决方案1】:

这是一个可能反映您想法的替代答案。您正在尝试遍历数组并从循环中返回结果。虽然您的语法错误,但您可以查看array_map,它可以为数组的每个元素调用您选择的函数。

因此,我们可以创建一个函数,该函数接受单个文件元数据数组并将名称格式化为列表元素

function listify($meta) {
    return '<li>'.htmlentities($meta['name']).'</li>';
}

现在我们可以使用带有array_map 的回调来构建我们的列表。由于array_map 返回一个数组,我们需要将implode 重新转换为常规字符串:

$filelist=implode('', array_map('listify', $data['data']['metas']));

您可以将其组合成一个语句,为了清楚起见,我只是将其分开。

【讨论】:

  • 伟大的技巧和伟大的思想。这也非常有用。谢谢!
【解决方案2】:
$filename = '';

for($i = 0; $i < count($data['data']['metas']); $i++) {
    $filename .= '<li>' . $data['data']['metas'][$i]['name'] . '</li>';
}

$message = str_replace('%filename%', $filename, $message);

【讨论】:

  • 做到了。没想到。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多