php uniqid с меньшим значением в порядке возрастания

#php

#php

Вопрос:

в папке с именем images у меня есть такие изображения:

 5ac7d5f6b23d3.jpg  
  

имена задаются с помощью uniqid функции php, а папка images сортируется по имени — по возрастанию

теперь я создаю новое изображение

есть ли способ — using uniqid or any other function — дать имя новому изображению — чтобы оно было first — в порядке возрастания?

итак, получение имен с помощью

 $array = glob('images/*.jpg');
print_r($array);
  

новое изображение должно быть первым в массиве

Комментарии:

1. Добавляйте имена файлов изображений с префиксом сортировки, например. 00000001_ , 00000002_ и т. Д… uniqid Функция поддерживает префиксный параметр.

2. Вы можете сортировать по mtime (времени модификации) с помощью DirectoryIterator

3. @MarkusZeller — вы имеете в виду — сначала отсортируйте папку images по времени изменения по убыванию, а затем перейдите к glob...

4. Нет, не используйте glob вообще. Когда у вас есть все значения и упорядочены по убыванию mtime, у вас уже есть самый новый файл, который затем является первой записью. Итератор расширяет SplFileInfo, который предоставляет вам очень подробную информацию о любом файле.

5. не могли бы вы написать пример, пожалуйста — мне нужен массив файлов, отсортированных по дате по убыванию

Ответ №1:

DirectoryIterator можно использовать для сканирования всех файлов каталога и считывания mtime (времени модификации) каждого файла. Сохраняя их в массиве как ключ, мы можем отсортировать ключи по убыванию, чтобы получить самый новый файл.

Это позволит найти любые файлы, потому что здесь не используется шаблон глобуса. Вы также можете переписать с помощью GlobIterator, если требуется шаблон.

Теперь давайте просканируем каталог на наличие всех файлов и проигнорируем другие каталоги.

 $mtimes = [];
foreach (new DirectoryIterator('./images') as $fileInfo) {
    if($fileInfo->isDir()) continue;
    $mtimes[$fileInfo->getMTime()] = $fileInfo->getFilename();
}
  

Сортировка массива по ключам в обратном порядке (по убыванию)

 krsort($mtimes);
  

Возьмите первый элемент, который является самым новым файлом.

 $latestFilename = reset($mtimes);
  

Комментарии:

1. а где массив файлов?

2. $mtimes содержит все файлы. Вы можете пройти через все с foreach ($mtimes as $mtime => $filename) echo "$filename last modified at $mtimen";