2012-04-28 14 views
1

私は以下のコードを持っています。preg_replace - 配列内のランダムな単語

<?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]、Nothing Worksの代わりにしようとしています!

私はあなたが私のことを助けることを願っています。) ありがとうございました!

答えて

2

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

は例です(これは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を使用することを検討してください。

+0

ありがとうございました^^ <?php $ user ['userID'] = '1'; $ユーザー['username'] = 'FooBar'; function repl($ m) { \tグローバル$ user; \t return $ user [$ m [1]]; } $ template = 'Hello {user:username}'; echo preg_replace_callback( '/ \ {ユーザー\:([a-zA-Z0-9] +)\} /'、 'repl'、$ template); //出力: //こんにちはFooBar Patrick

関連する問題