从php scandir列表中删除文件夹

时间:2011-06-08 17:23:42

标签: php

我有一个php脚本$filelist = scandir('myfolder/'),它列出了我文件夹中的文件。但它也将子文件夹添加到数组中,以便在使用foreach打印结果时也填充它们。我想删除添加到数组中的文件夹。我怎么能这样做?

6 个答案:

答案 0 :(得分:6)

简单方法

$dir = 'myfolder/';
$filelist = scandir($dir);
foreach ($filelist as $key => $link) {
    if(is_dir($dir.$link)){
        unset($filelist[$key]);
    }
}

答案 1 :(得分:3)

如果您知道这些文件夹的名称,可以创建这些文件夹的数组,然后使用array_diff将其从结果中删除:

$folders = array('..', '.', 'folder');
$files = array_diff(scandir($dir), $folders);

答案 2 :(得分:2)

干净简洁的解决方案可以使用 array_filter 排除所有子目录

$files = array_filter(scandir('directory'), function($item) {
    return !is_dir('directory/' . $item);
});

这实际上也删除了分别代表当前目录和父目录的...

答案 3 :(得分:1)

scandir返回一个文件夹数组。您可以删除数组中的任何元素:

unset( $filelist[0] );

其中0是您要删除的元素的索引。如果需要按名称查找目录,也可以使用array_search()。

答案 4 :(得分:1)

您可以使用glob()函数,并检查数组is_dir()的项目。

答案 5 :(得分:0)

尝试

<?php
$dir = "/example";

$filelist = new Array();
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (!is_dir($file)) {
                $filelist[] = $file;
            }
        }
        closedir($dh);
    }
}
?>

这就像做一个scandir,但检查返回文件的类型