从php scandir列表中删除文件夹

从php scandir列表中删除文件夹,php,Php,我有一个php脚本,它列出了我文件夹中的文件。但它也将子文件夹添加到数组中,以便在我使用foreach打印结果时也填充它们。我想删除添加到阵列中的文件夹。如何执行此操作???scandir返回文件夹数组。您可以删除数组中的任何元素,如下所示: unset( $filelist[0] ); 其中0是要删除的元素的索引。如果需要按名称查找目录,也可以使用array_search()。试试看 <?php $dir = "/example"; $filelist = new Array();

我有一个php脚本,它列出了我文件夹中的文件。但它也将子文件夹添加到数组中,以便在我使用
foreach
打印结果时也填充它们。我想删除添加到阵列中的文件夹。如何执行此操作???

scandir返回文件夹数组。您可以删除数组中的任何元素,如下所示:

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

试试看

<?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);
    }
}
?>


这就像进行扫描,但检查返回文件的类型可以使用该功能,并检查数组项是否正确。

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

$folders = array('..', '.', 'folder');
$files = array_diff(scandir($dir), $folders);
简单方法

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

一个干净简洁的解决方案可以是使用排除所有这样的子目录

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

这也有效地删除了分别代表当前目录和父目录的

是否要删除所有子元素,只列出“myfolder/”中的顶级文件夹?这对我很有效,但我需要使用全局变量,因此我添加了use()部分,以防其他人需要:
$picturesArr=array_filter($files,function($item)use($dir){return!is_dir($dir./'.$item);})