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} は置き換えられません。2 つの行を入れ替えたstr_replaceところ、別の結果が得られました。{foo} は置き換えられますが、{bar} は置き換えられません! 私も交換してみましたがpreg_replace、何も変わりませんでした。記録のために、$template->loadTemplate()関数はロードされた文字列に対して操作を実行せず、ファイルからテンプレートを取得するだけです。

私の質問は、PHP がこのように動作する理由と、この制限/バグを克服するにはどうすればよいかということです。

4

2 に答える 2

3

CORRUPT と述べたように、前のコマンドを無効にする文字列を置き換えています。パラメータとしてサポート
することを追加します。str_replaceArray()

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