我有一段代码扫描一个文件夹及其所有子目录,结果显示出一个 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;
});
所有未能按我要求的顺序排列此数组:对于每个文件夹,我希望首先显示最新文件(按修改日期排序)。
有几个这样的问题,请原谅我在我的用例中找不到一个。
提前致谢