![](/img/trans.png)
[英]Is it possible to pass a variable stored in an array by reference in PHP?
[英]Is it possible to create a variable variable from a back reference in php?
假設我有這個:
$t = "This %var% should be replaced";
$newText = preg_replace('/%(.+?)%/', "$1", $t);
這樣做是將%var%替換為var,因此文本變為:
This var should be replaced.
但是我想做的是有一個名為$ 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);
如您所見,我們需要用$ var的值替換%var%,用$ foo的值替換%foo%。
我已經解決了問題,但是采用了另一種方式。 但是我仍然想知道如何以這種方式解決它,因為代碼更具可讀性。 如果不可能解決,那為什么呢?
感謝您的答復和關注。 就像我說的那樣,我已經以不同的方式解決了這個問題,是的,我使用了preg_repace_callback。 我不是在尋找問題的解決方案,而是在解釋為什么無法從后向引用中創建變量變量的原因。 很抱歉,我的問題令人困惑,或者寫得不好,讓你們認為我還在尋找實現目標的解決方案。
如果您希望了解如何解決此問題,可以轉到我的博客,我昨天在那發布了有關此的文章: http : //imbuzu.wordpress.com/2012/02/07/back-references-in-php-how-使用它們來創建變量/
再次。 我不是在尋找一種方法來做這件事,而是在解釋為什么無法按照我最初的意圖去做。 為什么不能從后向引用創建變量變量?
致管理員。 此答復是對以上所有答案的一般答復。 如果您要對其進行編輯並將其添加為對其中任何一個的注釋,請將其添加至所有這些中,或者至少將此通知告知用戶。 謝謝。
關聯數組呢?
$replacement = array('var' => 'value1',
'foo' => 'value2');
$text = "This %var% should be replaced, just like this %foo%";
$newText = preg_replace('/%(.+?)%/', $replacement[$1], $text);
您可以使用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%不會被替換!
您必須使用preg_X函數和eval調用創建一個小型解析器。 使用這些食材,您可以烹飪如下食物:
<?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);
?>
這是一個很小的模板引擎
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.