2012-09-22 96 views
2

由於某種原因,我似乎無法將我的頭包裹起來。變量內的變量

$welcome_message = "Hello there $name"; 

$names_array = array("tom", "dick", "harry"); 

foreach ($names_array as $this_name) { 
    $name = $this_name; 
    echo $welcome_message."<br>"; 
} 

如何每次更新$ welcome_message中的$ name變量?

使用變量變量,但我似乎無法使其工作。

感謝

+0

就使$ WELCOME_MESSAGE分配在循環內。 – Tushar

回答

5

因爲$welcome_message評價只有一次,在開始時($name可能仍然是不確定的),這是行不通的。您不能在$welcome_message內「保存」所需表單並隨意「隨意」擴展(除非您使用eval,這是完全可以避免的)。

此舉將$welcome_message循環,而不是內部的線路:

$names_array = array("tom", "dick", "harry"); 

foreach ($names_array as $this_name) { 
    $welcome_message = "Hello there $this_name"; 
    echo $welcome_message."<br>"; 
} 
+0

問題是我的$ welcome_message比我的簡單例子要大得多。如果它的大,在一個循環中,我想在性能問題試圖在循環之外。 – phpmysqlguy

+0

@phpmysqlguy:您需要在每次迭代中將變量替換爲消息。無論你如何選擇這樣做,事實是,你不能神奇地避免這種情況。 – Jon

6

也許你正在尋找sprintf

$welcome_message = "Hello there %s"; 

$names_array = array("tom", "dick", "harry"); 

foreach ($names_array as $this_name) { 
    echo sprintf($welcome_message, $this_name), "<br>"; 
} 
+0

如果需要定製$ welcome_message的不同部分,如何處理它?例如「你好,%s,現在溫帶是」 – phpmysqlguy

+0

閱讀'* printf'函數族(start [here](http://php.net/manual/en/function.sprintf.php) )。簡而言之:您可以在一個字符串中包含多個佔位符,並且它們可以具有不同的格式。你的代碼需要一個字符串佔位符('%s'),但其他的則需要小數,浮點數,字符等等。 – Maerlyn

3

,你可以像這樣$ WELCOME_MESSAGE每次更新....

$welcome_message = "Hello there ".$name; 

現在的代碼會是這樣......

$welcome_message = "Hello there "; 

$names_array = array("tom", "dick", "harry"); 

foreach ($names_array as $this_name) { 
echo $welcome_message.$this_name"<br>"; 
} 
+0

我想我沒有提到$ welcome_message要大得多,並且有很多部分需要改變。這並不像我放手那麼簡單,我試圖簡化這個例子的目的。 – phpmysqlguy