我有一个php脚本$filelist = scandir('myfolder/')
,它列出了我文件夹中的文件。但它也将子文件夹添加到数组中,以便在使用foreach
打印结果时也填充它们。我想删除添加到数组中的文件夹。我怎么能这样做?
答案 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)
答案 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,但检查返回文件的类型