Код ниже является частью функции для захвата 5 файлов изображений из заданного каталога.
В настоящий момент readdir возвращает изображения «в том порядке, в котором они хранятся файловой системой» в соответствии с спецификацией .
Мой вопрос в том, как я могу изменить его, чтобы получить последние 5 изображений? Либо на last_modified
даты 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 YH:i:s", filemtime($absolute_dir . '/' . $file)); } $i++; } closedir($handle); }
Если вы хотите сделать это полностью на 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);
Если вас действительно интересуют только картинки, вы можете использовать glob () вместо scandir soulmerge:
$images = array(); foreach (glob("*.{png,jpg,jpeg}", GLOB_BRACE) as $filename) { $images[$filename] = filemtime($filename); } arsort($images); $newest = array_slice($images, 0, 5);
Или вы можете создать функцию для последних 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; }
btw im с использованием структуры CI. ура!