Php 使用多个str_替换的Foreach循环

Php 使用多个str_替换的Foreach循环,php,Php,我在PHP脚本中有一个foreach循环,它从数据库输出图标/链接。我曾经使用str_replace在图标渲染后更改一些值 foreach ($icons as $ic) { echo str_replace('{{EMP_NO}}', $_SESSION['EmpNo'], $ic['url']) . ' '; } 我需要对值{{FIRST_NAME}}执行类似的操作,但是当我附加第二个str_replace时,第二个命令/值被忽略。像这样: foreach ($icons as $

我在PHP脚本中有一个foreach循环,它从数据库输出图标/链接。我曾经使用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}}?

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

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()
的输出作为第二个过程的输入。但是,(因此它在内部“替换了两次”):


(注意:在我创建此值时,它似乎也表明了这一点。)

stru replace
可以将数组中的值替换为数组中的其他值:

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

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

这两个
echo
s都应该在循环体中:
foreach($ic作为图标){echo stru替换('{EMP NO}',$u SESSION['EmpNo'],$ic['url']);echo stru替换({{{FIRST_NAME},$SESSION FirstName},$ic['url'].';}
输入错误在哪里?没有@FirstOne@RoccoTheTaco如两个答案所示,在一个
foreach
中不能有两个主体。这是一个打字错误!重复:。另一个dup在这里:@RoccoTheTaco Agree to disagree。链接的问题和答案显示了一个关于如何使用该功能的简洁示例,就像手册一样(您没有咨询)。你的案例使用数组和循环只会增加复杂性。这会使图标的输出加倍并呈现两次?@RoccoTheTaco:你有两个
echo
语句,你不是在尝试输出两个东西吗?我会用你的意思更新答案……这可能是op想要的。我不认为这是2 echos.+1非常感谢您的帮助,这正是我所需要的。
foreach ($icons as $ic) {
    echo str_replace(
        array('{{EMP_NO}}', '{{FIRST_NAME}}'),
        array($_SESSION['EmpNo'], $_SESSION['FirstName']), 
        $ic['url']) . ' '
    );
}