.Stealth Posted June 4, 2010 Share Posted June 4, 2010 What is the best way to sort images in a folder by date. Here's what i've got so far: $images = array();//set array ready for the images $handle = opendir($imagesFolder);//open directory handle while(false !== $fName = readdir($handle)){ //get file path $fileInfo = pathinfo($imagesFolder.$fName); //get and convert extension to lower case $extension = strtolower($fileInfo['extension']); //add jpg and png file types to array if($extension == 'jpg' || $extension == 'jpeg'){ $images[] = $fName; } if($extension == 'png'){ $images[] = $fName; } } $sortedImages = array(); foreach($images AS $image){ $fileTime = filemtime($imagesFolder . $image);//get image creation time $sortedImages[] = array($fileTime => $image); } sort($sortedImages); foreach($sortedImages AS $sorted){ foreach($sorted AS $key => $value){ echo "<strong>Filetime:</strong> " . $key . " <strong>Filename:</strong> " . $value . "<br />"; } } All works well apart from the sorting part. It does sort something, but i'm assuming its just the size of the number. I didn't expect sort() to work but it was worth a shot. This is what the above script outputs: Filetime: 1268932652 Filename: 1.png Filetime: 1261508122 Filename: 5.jpg Filetime: 1268933066 Filename: 2.png Filetime: 1268932936 Filename: 4.png Filetime: 1268957350 Filename: 3.png Filetime: 1261508126 Filename: 6.jpg The files are created respective of their names. e.g 1.png was created first, 2.png was created second and so on. How can i sort these based on the time they were created? Thanks. Quote Link to comment Share on other sites More sharing options...
ignace Posted June 4, 2010 Share Posted June 4, 2010 function getFilesByExtension($directory, $validExtensions) { $files = array(); $directory = rtrim($directory, '\/') . DIRECTORY_SEPARATOR; $dh = opendir($imagesFolder); while (false != ($file = readdir($dh))) { $extension = pathinfo($file, PATHINFO_EXTENSION); $extension = strtolower($extension); if (in_array($extension, $validExtensions)) { $files[] = $directory . $file; } } closedir($dh); return $files; } function usort_sortFilesByLastModifiedTimeHelper($file1, $file2) { $mtime1 = filemtime($file1); $mtime2 = filemtime($file2); if ($mtime1 === $mtime2) { return 0; } return $mtime1 < $mtime2 ? -1 : 1; } $images = getFilesByExtension($imagesFolder, array('jpg', 'jpeg', 'gif', 'png')); usort($images, 'usort_sortFilesByLastModifiedTimeHelper'); print_r($images); Quote Link to comment Share on other sites More sharing options...
.Stealth Posted June 4, 2010 Author Share Posted June 4, 2010 Thanks! I'll give it a go. Just trying to work everything out first before i attempt to write a function (i would reuse your code but i would rather know what's going on). I think i understand it all apart from this bit: $directory = rtrim($directory, '\/') . DIRECTORY_SEPARATOR; What's with the DIRECTORY_SEPARATOR bit? I've never seen that done before, wont it just add that onto the end of the $directory string? Quote Link to comment Share on other sites More sharing options...
ignace Posted June 4, 2010 Share Posted June 4, 2010 What's with the DIRECTORY_SEPARATOR bit? I've never seen that done before, wont it just add that onto the end of the $directory string? Indeed it does. $directory = rtrim($directory, '\/') . DIRECTORY_SEPARATOR; rtrim first removes the trailing slash if any and adds a trailing slash. This code makes sure that $directory contains a trailing slash before proceeding. Quote Link to comment Share on other sites More sharing options...
.Stealth Posted June 4, 2010 Author Share Posted June 4, 2010 Ah i see. Thanks for your help! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.