// ------------------------------------------------------------
// Date struct for proper date handling
// ------------------------------------------------------------
function makeDate(int $y, int $m, int $d): array {
return ["year" => $y, "month" => $m, "day" => $d];
}
// ------------------------------------------------------------
// print a date in YYYY-MM-DD format
// ------------------------------------------------------------
function formatDate(array $d): string {
return sprintf("%04d-%02d-%02d", $d["year"], $d["month"], $d["day"]);
}
// ------------------------------------------------------------
// File entry struct
// ------------------------------------------------------------
function makeFile(string $name, string $ext, array $date, int $size): array {
return [
"name" => $name, // file name without extension
"extension" => $ext, // extension including dot
"date" => $date, // real date struct
"size" => $size // bytes
];
}
// ------------------------------------------------------------
// Sort by name (lexicographically)
// ------------------------------------------------------------
function sortByName(array &$files): void {
usort($files, fn($a, $b) => strcmp($a["name"], $b["name"]));
}
// ------------------------------------------------------------
// Sort by extension (lexicographically)
// ------------------------------------------------------------
function sortByExtension(array &$files): void {
usort($files, fn($a, $b) => strcmp($a["extension"], $b["extension"]));
}
// ------------------------------------------------------------
// Sort by date (year → month → day)
// ------------------------------------------------------------
function sortByDate(array &$files): void {
usort($files, function($a, $b) {
if ($a["date"]["year"] !== $b["date"]["year"])
return $a["date"]["year"] <=> $b["date"]["year"];
if ($a["date"]["month"] !== $b["date"]["month"])
return $a["date"]["month"] <=> $b["date"]["month"];
return $a["date"]["day"] <=> $b["date"]["day"];
});
}
// ------------------------------------------------------------
// Sort by size (ascending)
// ------------------------------------------------------------
function sortBySize(array &$files): void {
usort($files, fn($a, $b) => $a["size"] <=> $b["size"]);
}
// ------------------------------------------------------------
// print file list
// ------------------------------------------------------------
function printFiles(array $files): void {
foreach ($files as $f) {
echo "{$f["name"]}{$f["extension"]} " .
formatDate($f["date"]) . " " .
"{$f["size"]} bytes\n";
}
echo "\n";
}
// ------------------------------------------------------------
// Main program
// ------------------------------------------------------------
$files = [
makeFile("G1zTo5jJk", ".jpg", makeDate(2007,7,8), 51954),
makeFile("LTEE4SI0j", ".jpg", makeDate(2011,11,13), 43442),
makeFile("PDqmuO3GH", ".cpp", makeDate(2004,5,21), 3346),
makeFile("qJO2qjukZ", ".png", makeDate(2010,8,27), 67087),
makeFile("HqclTqxb4", ".cpp", makeDate(2020,9,5), 70531),
makeFile("imVyTyoaF", ".jpg", makeDate(2011,3,19), 43846),
makeFile("rXwXdy8XO", ".txt", makeDate(2017,10,12), 70193),
makeFile("9Z4fbOBUc", ".pdf", makeDate(2004,6,9), 1754),
makeFile("ZHahuu4vS", ".txt", makeDate(2003,10,10), 65126),
makeFile("0SnZHh2GT", ".png", makeDate(2006,10,18), 25890)
];
echo "Original:\n";
printFiles($files);
echo "Sorted by name:\n";
sortByName($files);
printFiles($files);
echo "Sorted by extension:\n";
sortByExtension($files);
printFiles($files);
echo "Sorted by date:\n";
sortByDate($files);
printFiles($files);
echo "Sorted by size:\n";
sortBySize($files);
printFiles($files);
/*
run:
Original:
G1zTo5jJk.jpg 2007-07-08 51954 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
Sorted by name:
0SnZHh2GT.png 2006-10-18 25890 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
Sorted by extension:
HqclTqxb4.cpp 2020-09-05 70531 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
Sorted by date:
ZHahuu4vS.txt 2003-10-10 65126 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
Sorted by size:
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
*/