簡體   English   中英

是否可以從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM