我有一个主目录"图像"和许多子目录 - 在它们内部是文件(在主文件夹中)。示例树:
+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
如果你能帮助我,我会很高兴的!谢谢!
答案 0 :(得分:2)
它可能与您在最后一行中调用的sort函数有关
sort($list);
它导致数组按字母顺序排序。您可以尝试将其删除,或者您可以尝试使用natsort。
natsort($list);
答案 1 :(得分:1)
这种情况正在发生,因为您正在使用完整路径进行排序。而不是排序,我会使用类似于排序的uasort,除了你使用回调函数来定义哪个先行。
或者,您可以通过将文件名添加到路径并使用插入键来获得。换句话说:
array_push($files, $dir . "/" . $file);
变为:
$files[$file . $dir] = $dir . "/" . $file;
然后你用ksort
排序