0

スクリプトでテンプレートの使用を開始しようとしていますが、テンプレートの変数をループする際に問題が発生します。単純なテンプレートスクリプトを作成しましたが、問題は、すべての変数ではなく、1つの変数しか置き換えられないことです。.=問題が続く場合(一度に1つの変数のみを置き換えます)。誰かが私のスクリプトのロジックを手伝ってくれませんか?

私のPHP

<?php
$data= array('uno'=>'1','dos'=>'2','tres'=>'3','cuatro'=>'4','cinco'=>'5');

function tpl ($data,$tpl = null) {

    foreach ( $data as $find => $replace ) {
            $return = str_replace('{'.$find.'}',$replace,$tpl);
    }

    return $return;
}

echo tpl($data, file_get_contents('tpl.tpl'));
?>

私のHTMLテンプレート

<html>
<h1>{uno}</h1>
<h2>{dos}</h2>
<h3>{tres}</h3>
<h4>{cuatro}</h4>
<h5>{cinco}</h5>
</html>
4

2 に答える 2

2

単純な問題です。常に$tplデータ内の置換を最初からやり直します。常に変数の内容を書き換えます。

function tpl ($data,$tpl = null) {

    $return  = $tpl; // this will be in foreach and will get rewritten.
    foreach ( $data as $find => $replace ) {
            $return = str_replace('{'.$find.'}', $replace, $return); // note $return from here
    }

    return $return;
}
于 2013-01-07T13:36:32.063 に答える
0

コードの問題は、常に $tpl 変数の新しいコピーでデータを置き換えていることです。そのため、1 つの変数のみが置き換えられます。すべての変数が置き換えられるように、置換のたびに $tpl 変数を更新する必要があります。

この問題を修正するには、次の変更を行います

foreach ( $data as $find => $replace ) {
        $tpl = str_replace('{'.$find.'}',$replace,$tpl);
}

return $tpl;

これで問題が解決します。

于 2013-01-07T13:40:28.437 に答える