我有一些PHP用于从我的图像目录中提取文件列表 - 它在表单中用于选择保存上载图像的位置。以下是代码:
$files = array_map("htmlspecialchars", scandir("../images"));
foreach ($files as $file) {
$filelist .= sprintf('<option value="%s">%s</option>' . PHP_EOL, $file, $file );
}
它工作正常,但显示“图像”中的所有文件和文件夹,是否有人知道修改此代码的方法,以便它只显示在'images'文件夹中找到的文件夹名称,而不是任何其他文件。
由于
答案 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);
?>