我正在尝试使用我的PHP代码按上传/修改日期对文件进行排序,但存在问题。有人知道怎么做或者把我推向正确的方向吗?
到目前为止,这是我的工作代码:
$dir = 'files';
$file_display = array('jpg', 'jpeg', 'png', 'gif');
if(file_exists($dir) == false){
echo 'Directory \''.$dir,'\' not found!';
} else {
$dir_contents = scandir($dir);
foreach($dir_contents as $file){
$file_type = strtolower(end(explode('.', $file)));
if($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true){
echo '<img src="', $dir, '/', $file,'" alt="', $file, '" width="700" height="700" />';
echo "<br />\n<br />\n";
}
}
}
答案 0 :(得分:0)
您可以通过PHP的usort()
函数对文件名进行排序,如下所示:
usort($dir_contents, create_function('$a,$b', 'return filemtime("'.$dir.'/$a")<filemtime("'.$dir.'/$b");'));
上面按文件的最后修改时间对数组进行排序。要按文件的创建时间排序,可以用filemtime
函数替换filectime
(也可以在Unix中查看official documentation的返回值),或者记住/从数据库中检索文件上传时间。以上紧凑的php排序基于this answer。
另一种方法是在Javascript中对图像进行排序。您的PHP代码可以如下所示:
<div id="container">
<?php
$dir = 'files';
$file_display = array('jpg', 'jpeg', 'png', 'gif');
if(file_exists($dir) == false){
echo 'Directory \''.$dir,'\' not found!';
} else {
$dir_contents = scandir($dir);
foreach($dir_contents as $file){
if($file == '.' || $file == '..') { continue; }
$arr = explode('.',$file);
$file_type = strtolower(end($arr));
if(in_array($file_type, $file_display)){
echo '<img src="', $dir, '/', $file,'" alt="', $file,
'" data-m="', filemtime("$dir/$file"),
'" data-u="', filectime("$dir/$file"), '" />';
}
}
}
?>
</div>
和相关的javascript
var container, images, arr;
function prepare_images(){
container = document.getElementById('container');
images = container.getElementsByTagName('img');//nodeList object
arr = [];
for (var i=0;i<images.length;i++) {
arr[i] = images[i];
}
sort_images('data-m');
}
function sort_images(attr){
arr.sort(function(a,b){
return parseInt(a.getAttribute(attr),10) - parseInt(b.getAttribute(attr),10);
});
for (var i=0;i<arr.length;i++) {
container.appendChild(arr[i]);
}
}
if (window.addEventListener) {
window.addEventListener("load", prepare_images, false);
} else if (window.attachEvent) {
window.attachEvent("onload", prepare_images); //for IE5-8
}