tags:

views:

540

answers:

2

The code below is part of a function for grabbing 5 image files from a given directory.

At the moment readdir returns the images 'in the order in which they are stored by the filesystem' as per the spec.

My question is, how can I modify it to get the latest 5 images? Either based on the last_modified date or the filename (which look like 0000009-16-5-2009.png, 0000012-17-5-2009.png, etc.).

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);
}
+3  A: 

If you want to do this entirely in PHP, you must find all the files and their last modification times:

$images = array();
foreach (scandir($folder) as $node) {
    $nodePath = $folder . DIRECTORY_SEPARATOR . $node;
    if (is_dir($nodePath)) continue;
    $images[$nodePath] = filemtime($nodePath);
}
$newest = array_slice(arsort($images), 0, 5);
soulmerge
A: 

You could try to convert its last-modified date into a UNIX timestamp (by using strtotime()).

It could look something like this:

$timestamp = strtotime(date("F/d/Y H:i:s", filemtime($absolute_dir . '/' . $file)));

By then you have the perfect data format to apply some sort function on, just sort from high to low for example.

SolidSmile
filemtime() already gives you a unix timestamp: http://de.php.net/manual/en/function.filemtime.php#function.filemtime.returnvalues
soulmerge