在foreach循环中包含文件

时间:2014-10-15 14:55:51

标签: php foreach include

是不是可以在foreach循环中使用PHP include?

我有一组名为$posts的文件名:

Array ( [3] => post-an-example-post.html
        [4] => post-my-first-test-post.html
        [5] => post-my-second-test-post.html )

我想为数组中的每个项输出每个内容(这是一些简单的HTML):

foreach ($posts as $post){
    $post = "/posts/" . $post;
    echo $post;
    include $post;
}

这给了我一个错误,因为它不会使用我添加的开头/而是保留在同一个文件中?:

Warning: include(/posts/post-an-example-post.html): failed to open stream: No such file or directory in /Applications/MAMP/htdocs/quick-blog/showposts.php on line 7

这些文件都存储在/ posts /目录中。

编辑:这是如何创建数组$ posts。它扫描目录并删除任何不以posts-

开头的内容
function postArray(){
$dir    = 'posts';
$files = scandir($dir);

$posts = array_filter(
    $files,
    function($value) {
        return (strpos($value, 'post-') === 0);
    }
);
return $posts;
}

3 个答案:

答案 0 :(得分:2)

您正在为include提供绝对位置。它正在文件系统的顶部寻找名为posts的目录,而不是文档根目录。

答案 1 :(得分:0)

有可能,我经常扫描给定文件夹中的文件并循环并包含每个文件。看起来像你的阵列?

它不应该是字符串吗?你也可以把file_exists做到:)

Array ( [3] => "post-an-example-post.html"
        [4] => "post-my-first-test-post.html"
        [5] => "post-my-second-test-post.html"

答案 2 :(得分:0)

首先,如果你在数组上做foreach($ posts as $ post),那么post将是数组的键。数组必须是这样的:

$posts = Array ( 3 => "post-an-example-post.html",
    4 => "post-my-first-test-post.html",
    5 => "post-my-second-test-post.html", 
);

立即尝试使用此数组