I have a chunk of code which scans through a folder an all its sub directories and brings out a json tree as a result.
i am trying to arrange these results as per the date modified so that recent files are shown first
The output JSON array looks like this:
{
    "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
                        }
                    ]
                }
            ]
        }
    ]
}
My php file looks like this:
<?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
));
?>
To sort my array i have tried the following using
usort
 function date_compare($a, $b)
       {
           $t1 = strtotime($a['datetime']);
           $t2 = strtotime($b['datetime']);
           return $t1 - $t2;
       }
 usort($files, 'date_compare');
but this had the following as an output:
{
    "name": "files",
    "type": "folder",
    "path": "files",
    "date_modified": "September 29 2019 08:37:06",
    "size": 4096,
    "items": true
}
Failing to bring out the sub directories, only bring out 'true'
I have tried several different uses of the usort function including:
usort($files['items']['items'], function($a, $b) {
      return (strtotime($a['date_modified']) < strtotime($b['date_modified']) -1 : 1);
    }); 
And
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; 
    });
All failing to arrange this array in the order i require: for every folder i want the latest file (ordered by date modified) to show first.
There are several questions like this, forgive me i couldn't find one with my use case.
Thanks in advance