16

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

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

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

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

谢谢

4

5 回答 5

28

最简单和最快的将是glob使用GLOB_ONLYDIR标志:

foreach(glob('../images/*', GLOB_ONLYDIR) as $dir) {
    $dirname = basename($dir);
}
于 2013-09-09T19:44:03.657 回答
9

功能is_dir()是解决方案:

foreach ($files as $file) {

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

}
于 2013-09-09T19:36:01.963 回答
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);
  }
}
于 2017-03-07T15:36:10.237 回答
1

您可以将您的array_map功能与glob

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

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

于 2018-09-25T13:14:21.673 回答
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);
?>
于 2021-04-30T00:49:23.977 回答