2016-09-15 2 views
1

У меня есть столбец внутри таблицы, содержащий несколько идентификаторов. Я могу использовать каждый идентификатор, чтобы определить путь к файлу, то есть содержание столбца = «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"; 

РЕЗУЛЬТАТЫ вЫШЕ кОД

порядок кода перепутались. Параметр $ fincl переменной echos выше (до) верхней половины моего html-кода и «1» echos для каждого файла, в котором переменная $ fincl указывается в коде. см. пример ниже.

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, если включение было успешным.

Теперь вы объединяете два возвращаемых значения из вашего оператора включения (который составляет True и True). 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

Смежные вопросы