2010-09-02 23 views
2

爲了執行更少的數據庫查詢和清晰的代碼,我希望在字符串中包含一個尚未定義的變量。稍後在頁面中,變量將被聲明並打印和評估字符串。我該怎麼做呢?如何在字符串中包含尚未定義的變量? PHP

$str="This $variable is delicious"; 

$array=array("Apple","Pineapple","Strawberry"); 

foreach($array as $variable) 
{ 
    print "$str"; 
} 

回答

13

可以使用printf()(或sprintf()如果你不想回應的話):

$str = 'This %s is delicious'; 

foreach ($array as $variable) { 
    printf($str, $variable); 
} 
+0

+2。 。 。 。 。 。 。 – 2010-09-02 05:53:31

+0

這是完美的。非常感謝! – matt 2010-09-02 05:54:34

+1

或者sprintf()如果你實際上不想回顯它。 +1 – Mchl 2010-09-02 05:55:09

-2
$str='This $variable is delicious'; // so no variable interpolation is performed 

$array=array("Apple","Pineapple","Strawberry"); 

foreach($array as $variable) 
{ 
    // Warning! This is a very bad idea! 
    // Using eval or system might create vulnerabilities! 
    eval('$str="' . $str . '";'); 
    print $str; 
} 
+2

這確實是一個壞主意。雖然不值得下調,因爲答案中指出這是一個壞主意。 – NullUserException 2010-09-02 05:42:53

+0

因此它在列表中說.. – 2010-09-02 05:45:10

0

使用str_replace

例如:

$str = "This is [VARIABLE] is delicious"; 
$array = array("Apple", "Pineapple", "Strawberry"); 

foreach($array as $variable) 
{ 
    print str_replace('[VARIABLE]', $variable, $str); 
} 
+0

我的解決方案將工作,但NullUserException的更好 – Mischa 2010-09-02 05:42:45

+0

@stereofrog:可以交換(v | s)printf()中變量的順序。見例#3:http://www.php.net/manual/en/function.sprintf.php – Mchl 2010-09-02 09:31:13

0

爲什麼你不只是做:

$array=array("Apple","Pineapple","Strawberry"); 

foreach($array as $variable) { 
    print "This $variable is delicious"; 
} 
+0

這將工作。但這不是我正在使用的實際代碼。我只是用它來說明這個例子。 – matt 2010-09-02 05:55:54

+0

@matt這是你的壞 – 2010-09-02 06:04:06

0

你可能是在做錯誤的方式。
學習使用模板,你永遠不會需要這種奇怪的東西。
只需將您的代碼分爲兩個部分:

  • 獲得所有必需的信息
  • 顯示正常的網頁或錯誤頁面

你會發現,所有的代碼變得非常整潔,可重複使用的

+0

OP可能會使用這個爲i8n – NullUserException 2010-09-02 05:51:27

+0

@Null好拍攝。我應該想到它。 – 2010-09-02 06:00:39

相關問題