2016-09-15 54 views
1

我在包含多個ID的表內有一列。我可以使用每個ID,以限定到一個文件的路徑,即,列內容=「1000 20201」可以被定義爲像這樣的可變路徑...如何將INCLUDE放入包含foreach條件的變量中

/1/1000/content-1000.html 
/20/20201/content-20201.html 

我已經寫以下代碼幾乎工作

$fids = $mcat['mcat_fmemids']; 

$fidsarr = explode(' ', $fids); 
foreach ($fidsarr as $fid) { 
$fincl .= include "../content/".substr($fid, 0, -3)."/".$fid."/content-".$fid.".html"; 
} 

echo "html code that goes above my variable"; 
echo $fincl; 
echo "html code that goes below my variable"; 

結果從上述代碼

的代碼的順序混亂。在我的html代碼的上半部分之前(前)$ fincl變量回聲,以及代碼中指定$ fincl變量的每個文件的「1」回聲。看下面的例子。

content-1000.html content 
content-20201.html content 
"html code that goes above my variable" 
"11" 
"html code that goes below my variable" 

任何想法正在發生以及如何解決它?

回答

1

include指令不會返回包含文件的輸出。相反,它從文件中的return語句返回值(如果存在)。否則如果包含成功,include將返回True

您現在將包含語句中的兩個返回值(即TrueTrue)連接起來。 PHP將此投影到"11"

$fids = $mcat['mcat_fmemids']; 
$fidsarr = explode(' ', $fids); 

echo "html code that goes above my variable"; 
foreach ($fidsarr as $fid) { 
    include "../content/".substr($fid, 0, -3)."/".$fid."/content-".$fid.".html"; 
} 
echo "html code that goes below my variable"; 

如果你不想包含在這個地方的文件,你可以使用輸出緩衝器獲取包括語句的輸出:

ob_start(); 
foreach (...) { 
    include $some_file; 
} 
$contents = ob_get_contents(); // get all the content within the buffer 
ob_clean(); // clear the buffer 
ob_end(); // stop output buffering 

print $contents; // print the output 
+0

感謝你的解釋。那就是訣竅。我想我需要了解更多關於php如何返回值的信息。 – Spaceman

+0

是的包括聲明有點棘手。有時它會返回成功狀態,有時會返回包含的PHP文件返回值。問題是,如果您可能從包含的文件中返回False,會發生什麼情況?它從外面看起來好像包含失敗... – keksnicoh

相關問題