2012-02-07 8 views
1

私はこれがあるとします。phpの後方参照から変数変数を作成することはできますか?

$t = "This %var% should be replaced"; 
$newText = preg_replace('/%(.+?)%/', "$1", $t); 

何それはないことはVARの%VAR%と交換するので、テキストは次のようになります。

This var should be replaced. 

しかし、私がやりたいことは$という名前の変数を持っているがvarを指定し、 "%var%"を$ varの値に置き換えます。

我々はこのような変数の変数を作成することができることを知っている:

$foo = "one"; 
$$foo = "two" 
echo $one; //prints "two" 

あなたがこのことを知っていない場合、あなたは私の質問に答えることができない場合があります。しかし、あなたは変数変数の詳細について読むことができますhttp://www.php.net/manual/en/language.variables.variable.php

これはうまくいきません。私がこれを行うと:

$t = "This %var% should be replaced"; 
$newText = preg_replace('/%(.+?)%/', $"$1", $t); 

私はエラーが発生します。

私はまた、このように試してみました:

$t = "This %var% should be replaced"; 
$newText = preg_replace('/%(.+?)%/', ${$1}, $t); 

そして、私は別のエラーを取得します。

質問は、どうすれば%var%を$ varの値に置き換える変数変数を作成するのですか?

あなたのいくつかは、単にこれをしない理由を尋ねるかもしれません:

$t = "This %var% should be replaced"; 
$newText = preg_replace('/%(.+?)%/', $var, $t); 

理由は簡単です。私が持っているテキストはそれより複雑です。もっと楽しくしてくれる?

$text = "This %var% should be replaced, just like this %foo%; 
$newText = preg_replace('/%(.+?)%/', "$1", $text); 

あなたが見ることができるように、我々は$ fooの値との$ varの値、および%のfoo%と%するvar%を交換する必要があります。

私はすでに問題を解決しましたが、別の方法で解決しました。しかし、私はまだコードがより読みやすくなっているので、この方法でそれを解決することがどのように可能かと思っています。それを解決することができない場合、なぜですか?


お返事いただきありがとうございます。私がすでに問題を別の方法で解決したと言ったように、はい、私はpreg_repace_callbackを使用しました。私は問題の解決策を探しているわけではありませんが、逆参照から可変変数を作成することができない理由については説明しています。私の質問が混乱していたり​​、ひどく書かれていて、私の目標を達成するための解決策を探していたと思ってしまったのは残念です。再びhttp://imbuzu.wordpress.com/2012/02/07/back-references-in-php-how-to-create-variable-variables-using-them/

あなたは、私はそれを解決方法を確認したい場合

は、あなたが私のブログに行くことができ、私はそこには、このことについて、昨日投稿しました。私はこれを行う方法を探しているのではなく、最初に意図した方法でそれを行うことができない理由について説明しています。逆参照から可変変数を作成できないのはなぜですか?

管理者にこの返信は、上記のすべての回答に対する一般的な回答です。あなたがそれを編集してそれらのいずれかにコメントとして追加する場合は、それらをすべてに追加するか、少なくともこの返信をユーザに通知してください。ありがとう。

+4

は、なぜあなたはちょうどpreg_replace_callbackを使用することはありませんです。これらの成分を使用すると、このような何かを調理することができますか? - 上記のコードは、あなたがしようとしていることを考えると、特に赤字にはなりません。 – AD7six

答えて

1

連想配列はどうですか?

$replacement = array('var' => 'value1', 
        'foo' => 'value2'); 
$text = "This %var% should be replaced, just like this %foo%"; 
$newText = preg_replace('/%(.+?)%/', $replacement[$1], $text); 
0

あなたはpreg_replace_callback()を使用することができます。

$var = '[replaced]'; 

function handler($found) 
{ 
    if (isset($GLOBALS[$found[1]])) 
    return $GLOBALS[$found[1]]; 
    else 
    return $found[0]; 
} 

$text = 'This %var% should be replaced and this %var2% will not be replaced!'; 
$newText = preg_replace_callback('/%(.+?)%/', 'handler', $text); 

echo $newText; 

これは以下を出力します

この[置き換え]を交換する必要があります。この%VAR2%が交換されることはありません!

0

preg_X関数と評価呼び出しを持つ小さなパーサを作成する必要があります。

<?php 
$var = 'world'; 
$end = '.'; 
$t = "This %var% should be replaced%end%"; 

//We should escape " character 
$t = str_replace('"','\"',$t); 

$php = $t; 
do 
{ 
    $orig_php = $php; 
    $php = preg_replace('/%([^%]+)%/','$\\1',$t); 
} while($php!=$orig_php); 

eval('$output="'.$php.'";'); 

echo($output); 

?> 

それは小さなテンプレートエンジン

関連する問題