我有像这样的文件夹结构
Folder/
09_06_2014/
Main Body/
page001.JPG
Folder/
03_06_2014/
Main Body/
page001.JPG
Folder/
09_07_2014/
Main Body/
page001.JPG
我要做的是从最近的文件夹(09_07_2014)中选择图片page001.JPG,目的是提供带有后续条目的下拉菜单。
我的代码块看起来像这样。
$dp = opendir('Folder/.');
while ($file = readdir ($dp)) {
if ($file != '.' && $file != '..') {
echo "<pre>";
echo "<a href='";
echo "$file/page001.JPG'>$file</a>\n";
echo "</pre>";
}
}
closedir($dp);
有人建议我将文件夹名称加载到3维数组中,但这超出了我的知识深度:(任何建议都会很棒
答案 0 :(得分:0)
将日期文件夹重命名为YYYYMMDD格式的最简单方法。有了它,必须直接按降序对字符串进行排序。
但是,如果您无法重命名文件夹,请将它们放入数组并编写自定义排序功能并使用usort。
答案 1 :(得分:0)
我为你实现了一些代码。我写的尽可能简单(至少我希望我做的;-))。没有oop - 只是程序代码。
最简单的方法是重命名前面提到的文件夹。它不具备表现力 - 但是为了学习目的而制作。
希望它会帮助你!
<?php
//
// Setup.
//
date_default_timezone_set('Europe/Vienna');
$rootDirectory = 'Folder/'; // Needs trailing slash!
$fileToInclude = 'Main Body/page001.JPG';
//
// Execute.
//
if(!is_dir($rootDirectory)) {
die('Directory "'. $rootDirectory .'" does not exist');
}
// Find directories in $rootDirectory.
$directories = array();
if($fh = opendir($rootDirectory)) {
while(false !== ($file = readdir($fh))) {
if($file != '.' && $file != '..') {
$absoluteFilePath = $rootDirectory . $file;
if(is_dir($absoluteFilePath)
&& strlen($file) == 10
&& substr_count($file, '_') == 2) {
$directories[] = $file;
}
}
}
closedir($fh);
}
// Check if directories are found.
if(count($directories) == 0) {
die('No directories found');
}
// Sort directories.
usort($directories, function($a, $b) {
// Transform directory name into UNIX timestamps.
$aTime = mktime(0, 0, 0, substr($a, 3, 2), substr($a, 0, 2), substr($a, -4));
$bTime = mktime(0, 0, 0, substr($b, 3, 2), substr($b, 0, 2), substr($b, -4));
// Compare.
if($bTime > $aTime) {
return 1;
} elseif($bTime < $aTime) {
return -1;
} else {
return 0;
}
});
// Loop through directories in that order.
foreach($directories as $directory) {
// Determine path to directory.
$absoluteDirectoryPath = $rootDirectory . $directory;
if(substr($directory, -1) != DIRECTORY_SEPARATOR) {
$absoluteDirectoryPath .= DIRECTORY_SEPARATOR;
}
// Find $fileToInclude in $absoluteDirectoryPath.
$filePath = $absoluteDirectoryPath . $fileToInclude;
if(file_exists($filePath)) {
echo('<a href="'. $filePath . '">' . $filePath . '</a><br />' . "\n");
}
}
?>