PHP scandir - 多个目录

时间:2016-02-05 14:00:51

标签: php wordpress scandir

我正在创建一个WordPress插件,允许用户将排序规则应用于特定模板(页面,存档,单个等)。我正在使用PHP scandir填充页面列表,如下所示:

$files = scandir(get_template_directory());

问题是我将single.php模板保存在'/ single'子文件夹中,因此上述函数不会调用这些模板。

如何在scandir函数中使用多个目录(可能是数组?),还是需要不同的解决方案?

所以基本上我想:

$files  =   scandir( get_template_directory() AND get_template_directory().'/single' );

我目前的解决方案(不是非常优雅,因为每个循环需要2个):

        function query_caller_is_template_file_get_template_files()
            {
                $template_files_list    =   array();

                $files          =   scandir(get_template_directory());
                $singlefiles    =   scandir(get_template_directory().'/single');

                foreach($files  as  $file)
                    {
                        if(strpos($file, '.php')    === FALSE)
                            continue;

                        $template_files_list[]  =   $file;
                    }

                foreach($singlefiles  as  $singlefile)
                    {
                        if(strpos($file, '.php')    === FALSE)
                            continue;

                        $template_files_list[]  =   $singlefile;
                    }

                return $template_files_list;
            }

1 个答案:

答案 0 :(得分:0)

首先,对于您正在做的事情,并没有任何错误。你有两个目录,所以你做两次相同的事情。当然,你可以让它看起来更清洁,避免使用明显的复制粘贴:

$files = array_merge(
    scandir(get_template_directory()),
    scandir(get_template_directory().'/single')
);

现在只需迭代单个数组。

在您的情况下,递归获取文件列表没有意义,因为可能存在您 想要检查的子目录。如果您 想要递归到子目录中,opendir()readdir()以及is_dir()将允许您构建递归扫描功能。

您可以使用'.php'稍微加强array_filter()过滤器部分。

$files = array_filter($files, function($file){
    return strpos($file, '.php');
});

我假设,如果文件以.php开头,那么您对列表不感兴趣(因为strpos()将返回{{1}的假值}} 在这种情况下)。我还假设你确定没有中间位置有0的文件。

赞,.php,因为您将使用版本控制等。

如果有可能,那么您可能需要稍微加强检查以确保template.php.bak位于文件名的 end