文件列表包括子目录和排序树

时间:2014-01-18 13:52:07

标签: php

我有一个主目录"图像"和许多子目录 - 在它们内部是文件(在主文件夹中)。示例树:

+Images
-first.jpg
-second.jpg
++FOLDER1
--image1.jpg
++FOLDER2
--image2.jpg

我在那里找到了一个脚本:

function ListFiles($dir) {
    if($dh = opendir($dir)) {
        $files = Array();
        $inner_files = Array();
        while($file = readdir($dh)) {
            if($file != "." && $file != ".." && $file[0] != '.') {
                if(is_dir($dir . "/" . $file)) {
                    $inner_files = ListFiles($dir . "/" . $file);
                    if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                } else {
                    array_push($files, $dir . "/" . $file);
                }
            }
        }
        closedir($dh);
        return $files;
    }
}
$list = ListFiles('../upload/_thumbs/Images');
sort($list);

foreach ($list as $key=>$file){
    echo '<option value="">'.$file.'</option>';
}

这个脚本工作正常,但我可以按文件夹排序我的结果(第一个主要内容,然后休息)......我得到了我的选择:

../upload/_thumbs/Images/first.jpg
../upload/_thumbs/Images/FOLDER1/image1.jpg
../upload/_thumbs/Images/FOLDER2/image2.jpg
../upload/_thumbs/Images/second.jpg

厚望:

../upload/_thumbs/Images/first.jpg
../upload/_thumbs/Images/second.jpg
../upload/_thumbs/Images/FOLDER1/image1.jpg
../upload/_thumbs/Images/FOLDER2/image2.jpg

如果你能帮助我,我会很高兴的!谢谢!

2 个答案:

答案 0 :(得分:2)

它可能与您在最后一行中调用的sort函数有关

sort($list);

它导致数组按字母顺序排序。您可以尝试将其删除,或者您可以尝试使用natsort。

 natsort($list);

答案 1 :(得分:1)

这种情况正在发生,因为您正在使用完整路径进行排序。而不是排序,我会使用类似于排序的uasort,除了你使用回调函数来定义哪个先行。

或者,您可以通过将文件名添加到路径并使用插入键来获得。换句话说:

 array_push($files, $dir . "/" . $file);

变为:

 $files[$file . $dir] = $dir . "/" . $file;

然后你用ksort

排序