我遇到了一个奇怪的问题。我有以下代码:
$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会以这种方式运行,其次,我如何克服这个限制/错误?
答案 0 :(得分: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);
答案 1 :(得分:3)
正如所说的CORRUPT,你正在替换排除上一个命令的字符串
我添加了str_replace
支持Array()
作为参数。
$str = str_replace(Array("{foo}","{bar}"), Array($bar['foo'], $bar['bar']) , $subj);