下面的代码是从给定目录中获取5个图像文件的函数的一部分。
目前,readdir根据spec按照文件系统存储的顺序返回图像。
我的问题是,如何修改它以获取最新的5张图片?基于last_modified
日期或文件名(看起来像0000009-16-5-2009.png,0000012-17-5-2009.png等)。
if ( $handle = opendir($absolute_dir) )
{
$i = 0;
$image_array = array();
while ( count($image_array) < 5 && ( ($file = readdir($handle)) !== false) )
{
if ( $file != "." && $file != ".." && $file != ".svn" && $file != 'img' )
{
$image_array[$i]['url'] = $relative_dir . $file;
$image_array[$i]['last_modified'] = date ("F d Y H:i:s", filemtime($absolute_dir . '/' . $file));
}
$i++;
}
closedir($handle);
}
答案 0 :(得分:13)
如果您想在PHP中完全执行此操作,则必须找到所有文件及其上次修改时间:
$images = array();
foreach (scandir($folder) as $node) {
$nodePath = $folder . DIRECTORY_SEPARATOR . $node;
if (is_dir($nodePath)) continue;
$images[$nodePath] = filemtime($nodePath);
}
arsort($images);
$newest = array_slice($images, 0, 5);
答案 1 :(得分:2)
如果您真的只对图片感兴趣,可以使用glob()而不是soulmerge的scandir:
$images = array();
foreach (glob("*.{png,jpg,jpeg}", GLOB_BRACE) as $filename) {
$images[$filename] = filemtime($filename);
}
arsort($images);
$newest = array_slice($images, 0, 5);
答案 2 :(得分:1)
或者您可以为指定文件夹中的最新5个文件创建功能。
private function getlatestfivefiles() {
$files = array();
foreach (glob("application/reports/*.*", GLOB_BRACE) as $filename) {
$files[$filename] = filemtime($filename);
}
arsort($files);
$newest = array_slice($files, 0, 5);
return $newest;
}
顺便说一句,我正在使用CI框架。干杯!