2015-06-11 41 views
0

有一個簡單的方法來更新的是在字符串中已經存在的變量值(不使用eval or replace功能)與{$var}語法?PHP:如何更新字符串中的變量值? (內嵌變量解析更新)

In this example

$id_a=1; $id_b = 2; 
echo $str = "The id {$id_a} is related to id {$id_b}\n"; 
// operations go in here that calculate new values for $id_ variables 
$id_a=124214; $id_b=325325; 
echo $str = "The id {$id_a} is related to id {$id_b}\n"; 

你注意到我分配相同的字符串兩次$str。 我的目標是隻有一次分配,每一次我echo $str如果$id_a$id_b發生了變化,$str將有更新的值。

如果有實現這一(即使它不打算專門做這個)的功能,我還沒有找到它,我會很高興知道這件事......

+0

*無需使用eval或更換*什麼是錯的更換呢?你以某種方式需要一個佔位符,你可以改變。你還想找什麼? – Rizier123

+0

@ Rizier123我舉了一個簡短的例子......我正在處理的字符串有很多變量,並且再次分配整個字符串不是一個選項。 – Armfoot

+0

爲什麼您需要重新分配它,只需在佔位符中指定一次,並在打印字符串之前每次更換它們。我不明白爲什麼你不能使用佔位符,然後你可以替換 – Rizier123

回答

2

使用sprintf到指定的參數需要出現在字符串中,並通過$ ID_A和$ ID_B作爲參數。例如。

$id_a=1; $id_b = 2; 
$format = "The id %d is related to id %d\n"; 
echo sprintf($format, $id_a, $id_b); 
// operations go in here that calculate new values for $id_ variables 
$id_a=124214; $id_b=325325; 
echo sprintf($format, $id_a, $id_b); 

這樣,你只有一次申報您的字符串的結構,並且可以重複使用其中的一次,你需要將它輸出。這也具有能夠在您的參數轉換成各種格式的優勢(檢查PHP docs頁)

+0

嗯,我真的不記得'printf'選項。感謝dukelukem和AbraCadaver提到它。 – Armfoot

+0

@Armfoot大聲笑,你說,你不想取代他們... http://stackoverflow.com/questions/30787955/php-how-to-update-values-of-variables-in-a -string-直列可變解析-UPD#comment49625500_30787955 26分鐘前已經問*爲什麼不* – Rizier123

+0

@ Rizier123 LOL我還是不明白,你Rizi ...'sprintf'被重用'$ format'變量,是隱藏的替換髮生在某處?巴爾瑪的回答呢?關心細節? – Armfoot

1

與Barmar的的想法,這讓認爲:

function calculateString($id_a, $id_b) { 
    return "The id {$id_a} is related to id {$id_b}\n"; 
} 

$id_a=1; $id_b = 2; 
echo $str = calculateString($id_a, $id_b); 
$id_a=124214; $id_b=325325; 
echo $str = calculateString($id_a, $id_b);