Foreach循环使用多个str_replace

时间:2017-12-01 15:32:11

标签: php

我在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}}?

2 个答案:

答案 0 :(得分:3)

str_replace可以将数组的值替换为其他值的数组

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

正如在@ David的回答中已经提到的那样,尽管你的代码具有正确的语法,但是它的代码是'逻辑是有缺陷的。

答案 1 :(得分: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在我创建这个时也是如此。)