0

テンプレートファイルで使用するPHP変数は多数あり、そのうちのいくつかは、HTMLしか使用できない編集者がアクセスできる必要があります。私が正確にやりたいのは、コンテンツを入力/編集するときに[ITEM_NAME_1]のようなことをしている変数を識別させ、PHPはそれらが角かっこで囲まれているためにそれらを見つけ、適切なPHP変数(この場合は$ ITEM_NAME_1)に置き換えます。 )。

各ページのコンテンツは変数「$page_content」に含まれているため、現時点で私が理解できる唯一の方法は、必要なものを置き換えるために手動で行を書き込むことです。

$page_content = str_replace("[ITEM_NAME_1]", "$ITEM_NAME_1", "$page_content"); 
print $page_content

問題は、これらの「ITEM_NAME_X」変数が何百もあることであり、ITEM_NAME_Xごとに手動で「str_replace」行の大規模な繰り返しを作成する必要はありません。

私が達成したいのは、PHPに、角かっこ[]で囲まれた$ page_content内のすべてを検索させ、角かっこ内から名前を取得して、そのすべてを角かっこで囲まれた名前の変数に置き換えることです。したがって、[ITEM_5]が見つかった場合は、$ITEM_5に置き換えられます。これは可能ですか?教えてください、ありがとう。

4

3 に答える 3

2

これは私が使用するものです:

public static function rewrite_curley($data,$message){

        if(is_array($data)){
            foreach($data as $key => $var){
                $find = '{'.$key.'}';
                $message = str_replace($find,$var,$message);
            }
            $message = preg_replace('/\{(.*)\}/','',$message); //strip any left over vars with out matches
        }
        return $message;

    }

明らかに私の変数は{}にあるため、関数名

于 2012-10-01T03:04:27.180 に答える
0

モディファイpreg_replaceで渦を巻きます。それを変数変数名構文と組み合わせて、必要な効果を得ることができます。/e

$page_content = preg_replace('/\[(.*?)\]/e', '$$1', $page_content);

これは、正規表現を使用して、角かっこの間の文字列を照合します。文字列がキャプチャさ$1れ、置換文字列でアクセスされます。2 番目$は、 にあるもので名前が付けられた変数を検索します$1

置換でより複雑なことをしたい場合は、置換文字列から独自の関数を呼び出すことができます。例えば:

function substitute_tag($tag_name)
{
    $replacement_values = array('foo' => 'bar', 'baz' => '42', ...);
    return $replacement_values[$tag_name];
}

$page_content = preg_replace('/\[(.*?)\]/e', 'substitute_tag("$1")', $page_content);
于 2012-10-01T03:06:33.873 に答える
0

str_replace の引数として単純に配列を使用しないのはなぜですか?

str_replace(array('string1', 'string2'), array('replacement1', 'replacement2'), $page_content);

このようにして、正規表現の使用を避けることができます。

于 2012-10-01T03:06:50.547 に答える