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

时间:2018-12-23 21:50:09

标签: php scandir

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";
        }
    }
}

结果-所有项目均作为类file并按以下顺序回显:

ipsum  
lorem  
moon.php  
sun 

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

lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum

2 个答案:

答案 0 :(得分:2)

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

以后使用is_dir时,仅传递文件/文件夹名称(相对路径)。这样做时,请按照documentation

  

如果filename是相对文件名,则将相对于当前工作目录进行检查。


您可以通过将正确的路径传递到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";
        }
    }
}

答案 1 :(得分:0)

你们都准备好了。

 $path

所以

$path.$el