2011-06-08 48 views
2

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

+0

是否要删除* all *子元素,仅列出'myfolder /'中的顶级文件夹? – 2011-06-08 17:27:30

回答

2

的类型,你可以使用函数glob(),并检查是否数组is_dir()的项目。

+2

我得到你的解决方案..但你能给我一个例子吗?我是初学者.. – 2011-06-09 14:50:12

1

scandir返回一组文件夹。您可以像这样删除阵列中的任何元素:

unset($filelist[0]); 

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

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,但检查返回文件

2

如果你知道什么文件夹的名称是,你可以创建这些文件夹的数组,然后使用和array_diff从结果中删除:

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

简单的方式

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

A 干净简明的解决方案可能会使用array_filter排除所有这样的子目录

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

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