0

HTML テンプレート

<b><!--{NAME}--></b>
...
..
..
<b><!--{ADDRESS}--></b>

PHP配列

array('name'=>'my full name', ..... , 'address'=>'some address ');

多くのテンプレート ファイルがあり、それらのそれぞれを解析し、連想配列内の指定されたデータ str_replace に置き換える必要があります。

このプロセスを改善するための提案、または役立つ可能性のあるその他の手法/ツールが必要です

編集:コードの現在のバージョン

static function ParseTemplate($data,$template){

    $html=$read==true ?  self::GetCached($template,true) : $template ;

    foreach($data as $key=>$value){
        if(is_array($value) ){
            foreach($data[$key] as $aval)
            $html = str_replace("<!--{".$key."}-->",$aval,$html);
        }
        else $html = str_replace("<!--{".$key."}-->",$value,$html);
    }

    return $html;

}

ありがとう

4

3 に答える 3

1

ここでPHPバージョンのMustacheなどのテンプレートエンジンを使用してみませんか

于 2012-12-12T01:42:25.857 に答える
1

配列キーが中括弧内のテンプレート ワードと常に同じである場合は、次のようにします。

foreach ($array as $key => $value) {
  $html = str_replace("<!--{$key}-->", $value, $html)
}

パフォーマンスが重要な場合は、html で strpos を使用し、プレースホルダーを 1 つずつ調べた方がよい場合があります。大きな文字列に対して str_replace を何度も実行する方が高速です。ただし、パフォーマンスが問題にならない場合は、必要ありません。

編集:

$index = strpos($html, "<!--");
while ( $index !== false ) {
  // get the position of the end of the placeholder
  $closing_index = strpos($html, "}-->", $index);

  // extract the placeholder, which is the key in the array
  $key = substr ($html, $index + 5, $closing_index);

  // slice the html. the substr up to the placeholder + the value in the array
  // + the substr after
  $html = substr ($html, 0, $index) . $array[$key] .
          substr ($html, $closing_index + 4);

  $index = strpos($html, "<!--", $index + 1);
}

注:これはテストされていないため、インデックスに不正確な点がある可能性があります...これは一般的なアイデアを提供するためのものです.

これは str_replace よりも効率的だと思いますが、わかりますか? これはいくつかのベンチマークを使用できます...

于 2012-12-11T07:34:40.653 に答える
0

質問を正しく理解していれば、何かが足りない場合を除いて、次のようにうまくいくと思います。

$a = array('name'=>'my full name','address'=>'some address');
foreach($a as $k=>$v)
{
    $html = str_replace('<!--{'.strtoupper($k).'}-->',$v,$html);
}
于 2012-12-11T07:36:55.993 に答える