1

私は次のコードを持っています。

<?php
$user['username'] = 'Bastian';

$template = 'Hello {user:username}';
$template = preg_replace('/\{user\:([a-zA-Z0-9]+)\}/', $user['\1'], $template);
echo $template;

// Output: 
// Notice: Undefined index: \1 in C:\xampp\htdocs\test.php on line 5
// Hello

私が何をするか知っていると思います(知っているといいのですが)。$ user ['$ 1']、$ user ["$ 1"]、または$ user [$ 1]を置き換えようとしましたが、何も機能しません。

私の助けていただければ幸いです=)よろしくお願いします!

4

1 に答える 1

2

使用する必要がありますpreg_replace_callback()-置換preg_replace()は文字列であるため、そこでPHPコードを使用することはできません。いいえ、/eevalは悪であるため、修飾子は解決策ではありません。

次に例を示します(PHP 5.3が必要ですが、とにかく最新バージョンを使用する必要があります!):

$user['username'] = 'FooBar';
$template = 'Hello {user:username}';
echo preg_replace_callback('/\{user\:([a-zA-Z0-9]+)\}/', function($m) use ($user) {
    return $user[$m[1]];
}, $template);

古いバージョンのPHPを使用する必要がある場合は、このようにすることができます。ただし、グローバル変数を使用しているため、はるかに醜いです。

function replace_user($m) {
    global $user;
    return $user[$m[1]];
}
echo preg_replace_callback('/\{user\:([a-zA-Z0-9]+)\}/', 'replace_user', $template);

ただし、独自に実装するのではなく、h2oなどのテンプレートエンジンを使用することを検討してください。

于 2012-04-28T12:37:33.513 に答える