我想打开一个目录并读取里面的所有文件并将它们放入一个array
,到目前为止我有:
$imagesdir = $CFG->dataroot.'/1/themeimages/';
这给了我目录的路径,下一步是什么?
由于从您的标签列表中我假设您正在使用 Moodle,您可以简单地使用:
function get_directory_list($rootdir, $excludefiles='', $descend=true, $getdirs=false, $getfiles=true)
该函数包含在moodlelib.php中。
从文档中读取:
- 返回一个数组,其中包含 * 所有子目录中的所有文件名,相对于给定的 rootdir。
有关可选参数的更多信息,请参阅官方文档。
filelib.php中还提供了读取文件内容的函数。
一个解决方案是使用opendir
++ (引用第一页的一个例子readdir
):closedir
$imagesdir = $CFG->dataroot.'/1/themeimages/';
if ($handle = opendir($imagesdir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
}
另一种解决方案是[DirectoryIterator
使用类;引用来自] 4页面的示例__construct
:
$imagesdir = $CFG->dataroot.'/1/themeimages/';
$dir = new DirectoryIterator($imagesdir);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
var_dump($fileinfo->getFilename());
}
}
当然,在每种情况下,您都必须将其放入数组中,而不仅仅是回显或转储文件名。
这意味着在循环之前初始化数组:
$list_files = array();
并且,在循环内部,根据您选择的解决方案,使用类似于这两行之一的内容:
$list_files[] = $file;
$list_files[] = $fileinfo->getFilename();
只需使用内置函数scandir:
从目录返回文件和目录的数组。
所以你会像这样使用它:
$array = scandir($imagesdir);
当然,您也可以使用 DirectoryIterator,但这要简单得多。
您还可以剥离点文件:
$array = array_diff(scandir($imagesdir), array('.', '..'));
如果您稍后还需要过滤器,这是最短的解决方案:
$imagesdir = $CFG->dataroot.'/1/themeimages/*.*';
foreach (glob($imagesdir) as $file)
array_push($files,$file);
php 自动排除.
和..
如果您不需要所有文件,您也可以指定自己的掩码,如上所示*.*
php 也会自动$files
为您创建数组。
最后一行也可以是:
$files[]=$file;
对于更多 OO 方法,请使用 DirectoryIterator 类。
$images = array();
$imagesdir = $CFG->dataroot.'/1/themeimages/';
foreach (new DirectoryIterator($imagesdir) as $file) {
if($file->isDot()) continue;
$images[] = $file;
}