scandir只显示文件夹,而不是文件

时间:2013-09-09 19:33:39

标签: php

我有一些PHP用于从我的图像目录中提取文件列表 - 它在表单中用于选择保存上载图像的位置。以下是代码:

$files = array_map("htmlspecialchars", scandir("../images"));       

foreach ($files as $file) {
 $filelist .= sprintf('<option value="%s">%s</option>' . PHP_EOL, $file, $file );
}

它工作正常,但显示“图像”中的所有文件和文件夹,是否有人知道修改此代码的方法,以便它只显示在'images'文件夹中找到的文件夹名称,而不是任何其他文件。

由于

5 个答案:

答案 0 :(得分:19)

最简单,最快捷的是glob GLOB_ONLYDIR 标志:

foreach(glob('../images/*', GLOB_ONLYDIR) as $dir) {
    $dirname = basename($dir);
}

答案 1 :(得分:8)

功能is_dir()是解决方案:

foreach ($files as $file) {

  if(is_dir($file) and $file != "." && $file != "..") $filelist .= sprintf('<option value="%s">%s</option>' . PHP_EOL, $file, $file );

}

答案 2 :(得分:8)

is_dir()函数需要一个指向它正在检查的项目的绝对路径。

$base_dir    = get_home_path() . '/downloads'; 
//get_home_path() is a wordpress function
$sub_dirs = array();
$dir_to_check = scandir($dir);
foreach ($dir_to_check as $item){
  if ($item != '..' && $item != '.' && is_dir($base_dir . "/" . $item)){
    array_push($sub_dirs, $item);
  }
}

答案 3 :(得分:1)

您可以将array_map函数与glob组合使用

$folders = array_map(function($dir) {
    return basename($dir);
}, glob('../images/*', GLOB_ONLYDIR));

是的,我复制了dev-null-dweller的一部分,但是我发现自己的解决方案更具可重用性。

答案 4 :(得分:0)

我试试这个

    <?php

$dir = "../";

$a = array_map("htmlspecialchars", scandir($dir));

$no = 0; foreach ($a as $file) {

  if ( strpos($file, ".") == null && $file !== "." && $file !== ".." ) {
    $filelist[$no] = $file; $no ++;
  }

}
print_r($filelist);
?>