scandir - 如何获取原始文件夹 - 文件顺序

scandir - how to get original folders - files order

fs 文件夹内的项目:

lorem  
ipsum  
sun  
moon.php  

function get_items($path){
    $arr = scandir($path);
    $arr = array_slice($arr, 2);
    foreach($arr as $el){
        if(is_dir($el)){
            echo "<div class='folder'>" . $el . "</div>\n";
        }
        else{
            echo "<div class='file'>" . $el . "</div>\n";
        }
    }
}

结果 - 所有项目都回显为 class - file 并按以下顺序排列:

ipsum  
lorem  
moon.php  
sun 

如何以 folder 和原始顺序获取文件夹 - 首先是文件夹,然后是文件?

lorem ipsum lorem ipsum lorem ipsum lorem ipsum

你们准备好了。

 $path

所以

$path.$el

您发布的代码可能有问题,因为 scandir return 只是文件和文件夹的名称,而不是它们的绝对路径。

当您稍后使用 is_dir 时,您只需传递 file/folder 名称(相对路径)。这样做时,根据 documentation

If filename is a relative filename, it will be checked relative to the current working directory.


您可以通过将正确的路径传递给 is_dir

来修复您的代码

is_dir("$path/$el")

为了使此解决方案有效,$path 不能有尾部斜杠(因为我们 添加它)。

此外 $path 必须是目标目录的绝对路径或目标目录的路径 相对于 脚本所在的工作目录 运行.


最后要先列出文件夹,然后列出文件,您可以对数组进行排序,或者更简单地,按如下方式进行两个 foreach 循环:

function get_items($path){
    $arr = scandir($path);
    $arr = array_slice($arr, 2);

    sort($arr);

    // Folders first
    foreach($arr as $el){
        if(is_dir("$path/$el")){
            echo "<div class='folder'>" . $el . "</div>\n";
        }
    }

    // Then files
    foreach($arr as $el){
        if( ! is_dir("$path/$el")){
            echo "<div class='file'>" . $el . "</div>\n";
        }
    }
}