У меня есть следующий php-скрипт, отображающий все изображения в каталоге
<?php $images = glob($dirname."*.jpg"); foreach($images as $image) { echo '<img src="'.$image.'" height ="400"/><br />'; } ?>
Я хочу изменить это, чтобы при посещении страницы было показано последнее измененное изображение сверху. Может ли кто-нибудь помочь мне, как я буду это делать?
Вы можете использовать filemtime()
чтобы найти дату изменения каждого файла. Это можно использовать в качестве ключа для сортировки массива с помощью uksort()
до его обработки в цикле.
Это поместит массив в порядке возрастания времени модификации файла, т. Е. С самым ранним mtime первым. Затем вы можете либо отменить массив, либо прокрутить его назад.
<?php function mtimecmp($a, $b) { $mt_a = filemtime($a); $mt_b = filemtime($b); if ($mt_a == $mt_b) return 0; else if ($mt_a < $mt_b) return -1; else return 1; } $images = glob($dirname."*.jpg"); usort($images, "mtimecmp"); array_reverse($images); foreach ($images as $image) { echo '<img src="'.$image.'" height ="400"/><br />'; } ?>
(Итерирование назад более эффективно …)
// ... usort($images, "mtimecmp"); for ($i = count($images) - 1; $i >= 0; $i--) { $image = $images[$i]; echo '<img src="'.$image.'" height ="400"/><br />'; }
Вы должны выполнить в два этапа: (a) прочитать содержимое каталога и отметить последнюю измененную информацию (b) сделать результат
$images = glob($dirname . '*.jpg'); $mostrecent = 0; $mostrecentimg = null; // scan foreach ($images as $image) { $imagemod = filemtime($image); if ($mostrecent < $imagemod) { $mostrecentimg = $image; $mostrecent = $imagemod; } } // display echo '<img src="' . $mostrecentimg . '" height="400"/><br />'; foreach($images as $image) { // the most recent was already output above so skip remainder this iteration if ($image == $mostrecentimg) continue; echo '<img src="' . $image . '" height="400"/><br />'; }