0

我有一段代码扫描一个文件夹及其所有子目录,结果显示出一个 json 树。

我正在尝试根据修改日期安排这些结果,以便首先显示最近的文件

输出 JSON 数组如下所示:

{
    "name": "files",
    "type": "folder",
    "path": "files",
    "date_modified": "September 29 2019 08:37:06",
    "size": 4096,
    "items": [
        {
            "name": "Root Folder",
            "type": "folder",
            "path": "files/data",
            "date_modified": "September 24 2019 08:36:38",
            "size": 64,
            "items": [
                {
                    "name": "Folder 1",
                    "type": "folder",
                    "path": "files/data/Folder 1",
                    "date_modified": "August 15 2019 07:00:33",
                    "size": 64,
                    "items": [
                        {
                            "name": "Data 1.pdf",
                            "type": "file",
                            "path": "files/data/Folder 1/Data 1.pdf",
                            "date_modified": "August 15 2019 07:00:33",
                            "size": 2047292
                        }
                    ]
                },
                {
                    "name": "Folder 2",
                    "type": "folder",
                    "path": "files/data/Folder 2",
                    "date_modified": "September 24 2019 08:37:53",
                    "size": 64,
                    "items": [
                        {
                            "name": "Data 1.pdf",
                            "type": "file",
                            "path": "files/data/Folder 2/Data 2.pdf",
                            "date_modified": "September 24 2019 08:37:53",
                            "size": 1523994
                        }
                    ]
                }
            ]
        }
    ]
}

我的 php 文件如下所示:

<?php

$dir = "files";

// Run the recursive function
if(isset($_GET[dir])){
    $dir = $_GET[dir];
}

$response = scan($dir);

function scan($dir){

    $files = array();

    // Is there actually such a folder/file?

    if(file_exists($dir)){

        foreach(scandir($dir) as $f) {

            if(!$f || $f[0] == '.') {
                continue; // Ignore hidden files
            }

            if(is_dir($dir . '/' . $f)) {

                // The path is a folder


                $files[] = array(
                    "name" => $f,
                    "type" => "folder",
                    "path" => $dir . '/' . $f,
                    "date_modified" => date("F d Y H:i:s",filemtime($dir . '/' . $f)),
                    "size" => filesize($dir . '/' . $f),
                    "items" => scan($dir . '/' . $f) // Recursively get the contents of the folder
                );

            }

            else {


                $files[] = array(
                    "name" => $f,
                    "type" => "file",
                    "path" => $dir . '/' . $f,
                    "date_modified" => date("F d Y H:i:s",filemtime($dir . '/' . $f)),
                    "size" => filesize($dir . '/' . $f) // Gets the size of this file
                );

            }
        }

    }

    return $files;
}



// Output the directory listing as JSON

header('Content-type: application/json');

echo json_encode(array(
    "name" => "files",
    "type" => "folder",
    "path" => $dir,
        "date_modified" => date("F d Y H:i:s",filemtime($dir)),
                    "size" => filesize($dir) ,
    "items" => $response
));

?>

为了对我的数组进行排序,我尝试了以下使用

排序

 function date_compare($a, $b)
       {
           $t1 = strtotime($a['datetime']);
           $t2 = strtotime($b['datetime']);
           return $t1 - $t2;
       }
 usort($files, 'date_compare');

但这有以下输出:

{
    "name": "files",
    "type": "folder",
    "path": "files",
    "date_modified": "September 29 2019 08:37:06",
    "size": 4096,
    "items": true
}

未能带出子目录,只带出'true'

我尝试了 usort 函数的几种不同用法,包括:

usort($files['items']['items'], function($a, $b) {
      return (strtotime($a['date_modified']) < strtotime($b['date_modified']) -1 : 1);
    }); 

usort($files, "sortFunction");
    $files = usort($array, function($a1, $a2) {
       $v1 = strtotime(date_format($a1['date_modified'],"F d Y H:i:s"));
       $v2 = strtotime(date_format($a2['date_modified'],"F d Y H:i:s"));
       return $v1 - $v2; 
    });

所有未能按我要求的顺序排列此数组:对于每个文件夹,我希望首先显示最新文件(按修改日期排序)。

有几个这样的问题,请原谅我在我的用例中找不到一个。

提前致谢

4

0 回答 0