0

我遇到了一个奇怪的问题。我有以下代码:

$foo = array(
        "some" => array(
            "foo" => "boohoo",
            "bar" => "foobar"
        ),
        "really" => array(
            "foo" => "boohoo",
            "bar" => "barfoo"
        ),
        "strange" => array(
            "foo" => "boohoo",
            "bar" => "foobarfoo"
        ),
        "occurences" => array(
            "foo" => "boohoo",
            "bar" => "barbaz"
        )
    );

$page = "";

foreach($foo as $bar)
{
    $subj = $template->loadTemplate('foobar', true);

    $str = "";

    $str = str_replace("{foo}", $bar['foo'], $subj);
    $str = str_replace("{bar}", $bar['bar'], $subj);

    $page .= $str;
}

这里的问题是,当 PHP 代码运行时,{bar} 在我的模板中被替换,但不是 {foo}。我换了两条str_replace线,得到了不同的结果—— {foo} 被替换了,但 {bar} 没有!我也试过换掉它preg_replace,没有任何改变。作为记录,该$template->loadTemplate()函数对加载的字符串不执行任何操作,它只是从文件中获取模板。

我的问题是:为什么 PHP 会以这种方式运行,其次,我该如何克服这个限制/错误?

4

2 回答 2

7

您只更改一个,因为两个替换都使用相同的输入字符串:

$str = str_replace("{foo}", $bar['foo'], $subj);
$str = str_replace("{bar}", $bar['bar'], $subj);

尝试这个:

$str = str_replace("{foo}", $bar['foo'], $subj);
$str = str_replace("{bar}", $bar['bar'], $str);
于 2013-09-17T08:01:32.133 回答
3

正如 CORRUPT 所说,您正在替换使上一个命令无效的字符串。
我会添加str_replace支持Array()作为参数。

$str = str_replace(Array("{foo}","{bar}"), Array($bar['foo'], $bar['bar']) , $subj);
于 2013-09-17T08:04:59.693 回答