我具有此功能,该功能可以引导到正确的图像文件夹(图像)并显示其图像,但是它显示了根路径中的所有图像和(图像)文件夹中的所有图像。我必须要做些什么才能使其仅显示属于(images)文件夹的图像?。
function searchSite( $path = 'images', $level = 0 ) {
$skip = array( 'cgi-bin', '.', '..' );
$look_for = array( '.jpg', '.gif', '.png', '.jpeg' );
$dh = @opendir( $path );
while ( false !== ( $file = readdir( $dh ) ) ) {
$file_ext = substr( $file, -4, 4 );
if ( !in_array( $file, $skip ) ) {
if ( is_dir( "$path/$file" ) ) {
searchSite( "$path/$file", ( $level + 1 ) );
} else if ( in_array( $file_ext, $look_for ) ) {
echo "<option value='$path/$file' />$file</option>";
}
}
closedir( $dh );
}
答案 0 :(得分:2)
PHP拥有自己的文件系统和过滤器类。使用这些类,您可以轻松地在目录树上递归地迭代以获取所需的所有文件。如今,不赞成编写自己的功能,因为迭代器和过滤器类的构建效率更高,并且无需重新发明轮子。
这是一个简短的示例,说明如何使用内置文件系统和过滤器类。
<?php
declare(strict_types=1);
namespace Marcel;
use FilesystemIterator;
use RecursiveCallbackFilterIterator;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
$directory = new RecursiveDirectoryIterator('../assets/images/', FilesystemIterator::FOLLOW_SYMLINKS);
$filter = new RecursiveCallbackFilterIterator($directory, function($current, $key, $iterator) {
if ($current->isDir()) {
return !in_array($current->getFilename(), ['.', '..', 'bla']);
} else {
return in_array($current->getExtension(), ['jpg', 'png']);
}
});
$iterator = new RecursiveIteratorIterator($filter);
$files = [];
foreach ($iterator as $file) {
$files[] = $file->getPathname();
}
var_dump($files);