2016-09-15 14 views
1

複数のIDを含むテーブル内に列があります。私は、ファイルへのパスを定義するには、各IDを使用することができ、すなわちコラムの内容は=「1000 20201」foreach条件を含む変数にINCLUDEを入れる方法

/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"; 

結果を台無しにされています。 $ fincl変数は、自分のHTMLコードの上半分(前)と、$ 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)の2つの戻り値を連結するようになりました。 PHPを"11"にキャストします。あなたがこの場所でファイルを含めない場合、あなたは出力バッファを使用して、include文の出力を取り出すことができ

$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

関連する問題