【问题标题】:Foreach loop using multiple str_replace使用多个 str_replace 的 Foreach 循环
【发布时间】:2018-05-15 17:59:25
【问题描述】:

我在 PHP 脚本中有一个 foreach 循环,它从数据库中输出图标/链接。我已经使用this question 来使用 str_replace 在图标渲染后更改一些值。

foreach ($icons as $ic)
    { echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' '; }

我需要对值 {{FIRST_NAME}} 执行类似的操作,但是当我附加第二个 str_replace 时,第二个命令/值将被忽略。像这样:

foreach ($icons as $ic)

    { echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' '; }
    { echo str_replace('{{FIRST_NAME}}', $_SESSION['FirstName'], $ic['url']) . ' '; }

当我尝试像这样组合它们时,它会使我不想要的图标输出加倍:

foreach ($icons as $ic) { echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' '; echo str_replace('{{FIRST_NAME}}', $_SESSION['FirstName'], $ic['url']) . ' '; }

我如何也str_replace {{FIRST_NAME}}?

【问题讨论】:

  • echos 都应该在循环体内:foreach ($icons as $ic) { echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' '; echo str_replace('{{FIRST_NAME}}', $_SESSION['FirstName'], $ic['url']) . ' '; }
  • 错字在哪里?没有@FirstOne
  • @RoccoTheTaco 如两个答案所示,foreach 中不能有两个主体。打错字了!
  • @RoccoTheTaco 同意不同意。链接的问题和答案显示了有关如何使用该功能的简洁示例,就像手册(您未能查阅)一样。您的案例只会通过使用数组和循环来增加复杂性。

标签: php


【解决方案1】:

您的循环结构不正确。如果你重新对齐括号,你会看到你有这个:

foreach ($icons as $ic)
{
    echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' ';
}
{
    echo str_replace('{{FIRST_NAME}}', $_SESSION['FirstName'], $ic['url']) . ' ';
}

基本上,您已经给出了相同的循环两个体。实际所做的是将第一个主体作为循环本身执行,然后第二个“主体”(随机花括号中的代码块)在循环之后简单地执行一次,就像任何其他代码一样。

一个循环只有一个主体:

foreach ($icons as $ic) {
    echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' ';
    echo str_replace('{{FIRST_NAME}}', $_SESSION['FirstName'], $ic['url']) . ' ';
}

编辑:根据下面的评论,听起来您真的只想输出 一行 而不是两行。在这种情况下,您不想echo 两次。但是您仍然想替换两次。第一遍可能只是将第一个 str_replace() 的输出作为第二个的输入。但是,str_replace() also accepts arrays(所以它在内部“替换了两次”):

foreach ($icons as $ic) {
    echo str_replace(array('{{EMP_NO}}', '{{FIRST_NAME}}'), array($_SESSION['EmpNo'], $_SESSION['FirstName']), $ic['url']) . ' ';
);

(注意:看起来another answer 在我创建这个时也建议了这一点。)

【讨论】:

  • 这会使图标的输出加倍并渲染两次?
  • @RoccoTheTaco:你有两个echo 语句,你不是想输出两个东西吗?我会用你的意思更新答案......
【解决方案2】:

str_replace 可以将 array 的值替换为 array 的其他值:

foreach ($icons as $ic) {
    echo str_replace(
        array('{{EMP_NO}}', '{{FIRST_NAME}}'),
        array($_SESSION['EmpNo'], $_SESSION['FirstName']), 
        $ic['url']) . ' '
    );
}

正如@David 的回答中已经提到的,虽然你的代码有正确的语法,但它的逻辑是有缺陷的。

【讨论】:

  • 这可能是操作人员正在寻找的。我不认为这是2个回声。 +1
  • 非常感谢您的帮助,这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多